From endofunctor@yahoo.com Thu Feb 2 22:14:21 2006 From: endofunctor@yahoo.com (Lee Perry) Date: Thu, 2 Feb 2006 14:14:21 -0800 (PST) Subject: [MLton] x86-64 port Message-ID: <20060202221421.84828.qmail@web35707.mail.mud.yahoo.com> --0-151450105-1138918461=:81599 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Can the x86-64 port of MLton be compiled from full 64-bit mode or does it have to be bootstrapped by cross-compiling from 64-bit mode with 32-bit compatibility enabled? --------------------------------- What are the most popular cars? Find out at Yahoo! Autos --0-151450105-1138918461=:81599 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Can the x86-64 port of MLton be compiled from full 64-bit mode or does it have to be bootstrapped by cross-compiling from 64-bit mode with 32-bit compatibility enabled?



What are the most popular cars? Find out at Yahoo! Autos --0-151450105-1138918461=:81599-- From fluet@cs.cornell.edu Thu Feb 2 23:49:20 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Thu, 2 Feb 2006 18:49:20 -0500 (EST) Subject: [MLton] x86-64 port In-Reply-To: <20060202221421.84828.qmail@web35707.mail.mud.yahoo.com> References: <20060202221421.84828.qmail@web35707.mail.mud.yahoo.com> Message-ID: > Can the x86-64 port of MLton Well, no such beast exists currently. > be compiled from full 64-bit mode or does it have to be bootstrapped by > cross-compiling from 64-bit mode with 32-bit compatibility enabled? The plan will be to have a self-compiling 64-bit port. Ultimately, the first bootstrap will come from either a 32-bit compiler cross-compiling to a 64-bit target, or such a 32-bit compiler running on a 64-bit platform with 32-bit compatibility enabled, but once one such bootstrap has been released, future releases should be compiled by previous releases. From fluet@cs.cornell.edu Sat Feb 4 16:00:00 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Sat, 4 Feb 2006 11:00:00 -0500 (EST) Subject: [MLton] Elaborator bug Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1417689696-1732033131-1139068800=:15050 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed The attached source exhibits the following bug: ElaborateEnv.functorClosure: firstTycons I note that the bug is sensitive to the _number_ of structure/functor bindings made. That is, if you eliminiate some bindings in c-types.sml but increase the number of times c-types.sml is included in sources.mlb, then you maintain the bug. Likewise, if you increase the number of bindings in c-types.sml and decrease the number of times c-types.sml is included in sources.mlb, then you maintain the bug. --1417689696-1732033131-1139068800=:15050 Content-Type: APPLICATION/x-gzip; name=z.tgz Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=z.tgz H4sIAPTN5EMAA+1XX0/bMBDnuZ/ihCYNEHRJG8JA6gMUNphKkcgqHiPTuiRb cFjiwNin39lJSZq4Tdq1MKTcQw25s3/3z3fn0I+CIQ2b997txrpIQzJNQ64H uRVJ17TWhq61D3TdME1T29D0VgvZoK1NowxFIScBwMbYiyifI1fGf6dEGANo AMBmSH9FlA1p32cD5nJ4IgHblBzmM/rbIegp95FeEj50YiZsBnQUsRFhPPO1 4TKx68OWddmzexcn259uSeiG8a/IM8EdOr4f0mZ478n/9vjzg0jCdqv+9Jqf KBs13joDa3pLSi/i+jBK6n973zhI63/bEPVfb7Xr+v8atLUDXf/hOXDvHA5b 3W3QDw8P91oYMDinLHiGLv3BXbYLWOG5Q5/gi/DDLlhRQEOnATtYVeAbucM+ QrhDUJCwEVicPjiUwQ2lP8MmSgnByx73GbghBNSjJKQjwN5BAyBwYp3uhfzZ o+C5Q8owH4W8RSkgJIxdZMjNe72L7lnfOoOxH8CIcuJ68vTtRiN071ABVAq6 51dX1pl90f/et4+vv0JHFD5kiwVJFED4SIAn/z8SD8YXjH8+AvHbdBkv8HRT MnVTyW23JBdLqoprGpJrGilXVN3GOGJDjmZ05QVEib4t8GHrGI7yNmzjp8SK +FzIKHvc5OJE6MQiPIiGPJHqIFPaJiHViLq5CGTiggqYeO5s0HZrEdDEsxVA 8dzZoKaxCGgSsAqgeK6MaCEFr8+Oe9Vz8JoST6RSvDYDXIoCIpviNSOgyCch 07fjo6asftFJZXYWuszw5Oyiu1PonMNLoSdGVYGe6fSbq+vT6k6/8YMR3ny5 NJ/wt8gWlz9eZwiIoMXrDAERtHjNCCiCJmT6ttRlynEvJqkcl1G9zG/xycWI pbi5YlAKPPFJFWRlQUihc3laCj3xdhVoZZ6m0Lk8LYWexLEKdJKnb93mZ1Lu RbAWDDn/adqs+c84MMx0/jN0Mf+Z+n49/70GFeY/HP2Mdzj/NYQh4q/4GsqG YHcdDG1ncjP9B9RITkOyFXDkiA4/VRnkFjudG7AwKAaGjmJqm0a2loC2VoQ9 UGDHpf8FXJavafRBBl2Wxix8piR2lM0qZ73jB7xoPXaAeeaLTQubLztWDn05 +JXhD1T4SQecG4GsBouFQKEF6lZ0ATbCOS5AgYXtl2075/8loK0VYQ+K2MkA MNfzKfpifldo0PPZ3aLWiz0r8fwy4Naq0AcK9CrOz+CvxPtqJ+AgVhKBpfwg Z0dFFJZRwlqlFoMZWiRDaWlElo6KQpcvnk/y1zJ5P77oIV9+03rIbXbmVZnV IfOa7KgfvdM6nPrRLc4RRSWyzlAoEe9bSgtVbrh/8jpUuCJi17/ckP/3+VFT TTXVVFNNNdVUU001vSL9BWrlnJkAKAAA --1417689696-1732033131-1139068800=:15050-- From fluet@cs.cornell.edu Sat Feb 4 16:15:20 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Sat, 4 Feb 2006 11:15:20 -0500 (EST) Subject: [MLton] Elaborator bug In-Reply-To: References: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1417689696-313439160-1139069720=:15050 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > The attached source exhibits the following bug: > ElaborateEnv.functorClosure: firstTycons > > I note that the bug is sensitive to the _number_ of structure/functor > bindings made. That is, if you eliminiate some bindings in c-types.sml but > increase the number of times c-types.sml is included in sources.mlb, then you > maintain the bug. Likewise, if you increase the number of bindings in > c-types.sml and decrease the number of times c-types.sml is included in > sources.mlb, then you maintain the bug. Here is a single, self-contained .sml file the exhibits the bug. --1417689696-313439160-1139069720=:15050 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=z.sml Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=z.sml c2lnbmF0dXJlIENIT09TRV9JTlROX0FSRyA9DQogICBzaWcNCiAgICAgIHR5 cGUgJ2EgdA0KICAgICAgdmFsIGZJbnQ4OiBJbnQ4LmludCB0DQogICAgICB2 YWwgZkludDE2OiBJbnQxNi5pbnQgdA0KICAgICAgdmFsIGZJbnQzMjogSW50 MzIuaW50IHQNCiAgICAgIHZhbCBmSW50NjQ6IEludDY0LmludCB0DQogICBl bmQNCg0KZnVuY3RvciBDaG9vc2VJbnROX0ludDggKEEgOiBDSE9PU0VfSU5U Tl9BUkcpIDogDQogICBzaWcgdmFsIGYgOiBJbnQ4LmludCBBLnQgZW5kID0g DQogICBzdHJ1Y3QgdmFsIGYgPSBBLmZJbnQ4IGVuZA0KZnVuY3RvciBDaG9v c2VJbnROX0ludDE2IChBIDogQ0hPT1NFX0lOVE5fQVJHKSA6IA0KICAgc2ln IHZhbCBmIDogSW50MTYuaW50IEEudCBlbmQgPSANCiAgIHN0cnVjdCB2YWwg ZiA9IEEuZkludDE2IGVuZA0KZnVuY3RvciBDaG9vc2VJbnROX0ludDMyIChB IDogQ0hPT1NFX0lOVE5fQVJHKSA6IA0KICAgc2lnIHZhbCBmIDogSW50MzIu aW50IEEudCBlbmQgPSANCiAgIHN0cnVjdCB2YWwgZiA9IEEuZkludDMyIGVu ZA0KZnVuY3RvciBDaG9vc2VJbnROX0ludDY0IChBIDogQ0hPT1NFX0lOVE5f QVJHKSA6IA0KICAgc2lnIHZhbCBmIDogSW50NjQuaW50IEEudCBlbmQgPSAN CiAgIHN0cnVjdCB2YWwgZiA9IEEuZkludDY0IGVuZA0KDQpzaWduYXR1cmUg Q0hPT1NFX1JFQUxOX0FSRyA9DQogICBzaWcNCiAgICAgIHR5cGUgJ2EgdA0K ICAgICAgdmFsIGZSZWFsMzI6IFJlYWwzMi5yZWFsIHQNCiAgICAgIHZhbCBm UmVhbDY0OiBSZWFsNjQucmVhbCB0DQogICBlbmQNCg0KZnVuY3RvciBDaG9v c2VSZWFsTl9SZWFsMzIgKEEgOiBDSE9PU0VfUkVBTE5fQVJHKSA6IA0KICAg c2lnIHZhbCBmIDogUmVhbDMyLnJlYWwgQS50IGVuZCA9IA0KICAgc3RydWN0 IHZhbCBmID0gQS5mUmVhbDMyIGVuZA0KZnVuY3RvciBDaG9vc2VSZWFsTl9S ZWFsNjQgKEEgOiBDSE9PU0VfUkVBTE5fQVJHKSA6IA0KICAgc2lnIHZhbCBm IDogUmVhbDY0LnJlYWwgQS50IGVuZCA9IA0KICAgc3RydWN0IHZhbCBmID0g QS5mUmVhbDY0IGVuZA0KDQpzaWduYXR1cmUgQ0hPT1NFX1dPUkROX0FSRyA9 DQogICBzaWcNCiAgICAgIHR5cGUgJ2EgdA0KICAgICAgdmFsIGZXb3JkODog V29yZDgud29yZCB0DQogICAgICB2YWwgZldvcmQxNjogV29yZDE2LndvcmQg dA0KICAgICAgdmFsIGZXb3JkMzI6IFdvcmQzMi53b3JkIHQNCiAgICAgIHZh bCBmV29yZDY0OiBXb3JkNjQud29yZCB0DQogICBlbmQNCg0KZnVuY3RvciBD aG9vc2VXb3JkTl9Xb3JkOCAoQSA6IENIT09TRV9XT1JETl9BUkcpIDogDQog ICBzaWcgdmFsIGYgOiBXb3JkOC53b3JkIEEudCBlbmQgPSANCiAgIHN0cnVj dCB2YWwgZiA9IEEuZldvcmQ4IGVuZA0KZnVuY3RvciBDaG9vc2VXb3JkTl9X b3JkMTYgKEEgOiBDSE9PU0VfV09SRE5fQVJHKSA6IA0KICAgc2lnIHZhbCBm IDogV29yZDE2LndvcmQgQS50IGVuZCA9IA0KICAgc3RydWN0IHZhbCBmID0g QS5mV29yZDE2IGVuZA0KZnVuY3RvciBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEg OiBDSE9PU0VfV09SRE5fQVJHKSA6IA0KICAgc2lnIHZhbCBmIDogV29yZDMy LndvcmQgQS50IGVuZCA9IA0KICAgc3RydWN0IHZhbCBmID0gQS5mV29yZDMy IGVuZA0KZnVuY3RvciBDaG9vc2VXb3JkTl9Xb3JkNjQgKEEgOiBDSE9PU0Vf V09SRE5fQVJHKSA6IA0KICAgc2lnIHZhbCBmIDogV29yZDY0LndvcmQgQS50 IGVuZCA9IA0KICAgc3RydWN0IHZhbCBmID0gQS5mV29yZDY0IGVuZA0KDQoo KiBDICopDQpzdHJ1Y3R1cmUgQzBfQ2hhciA9IHN0cnVjdCBvcGVuIEludDgg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMF9DaGFyX0Nob29zZUludE4g KEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpz dHJ1Y3R1cmUgQzBfU0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9 IGludCBlbmQNCmZ1bmN0b3IgQzBfU0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hP T1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVy ZSBDMF9VQ2hhciA9IHN0cnVjdCBvcGVuIFdvcmQ4IHR5cGUgdCA9IHdvcmQg ZW5kDQpmdW5jdG9yIEMwX1VDaGFyX0Nob29zZVdvcmROIChBOiBDSE9PU0Vf V09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ4IChBKQ0Kc3RydWN0dXJl IEMwX1Nob3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVu ZA0KZnVuY3RvciBDMF9TaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5U Tl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMF9T U2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEMwX1NTaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMF9VU2hv cnQgPSBzdHJ1Y3Qgb3BlbiBXb3JkMTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1 bmN0b3IgQzBfVVNob3J0X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5f QVJHKSA9IENob29zZVdvcmROX1dvcmQxNiAoQSkNCnN0cnVjdHVyZSBDMF9J bnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEMwX0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDMF9TSW50ID0gc3Ry dWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMF9T SW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJ bnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMwX1VJbnQgPSBzdHJ1Y3Qgb3Bl biBXb3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzBfVUludF9D aG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3Jk Tl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzBfTG9uZyA9IHN0cnVjdCBvcGVu IEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzBfTG9uZ19DaG9v c2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQz MiAoQSkNCnN0cnVjdHVyZSBDMF9TTG9uZyA9IHN0cnVjdCBvcGVuIEludDMy IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzBfU0xvbmdfQ2hvb3NlSW50 TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEp DQpzdHJ1Y3R1cmUgQzBfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlw ZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzBfVUxvbmdfQ2hvb3NlV29yZE4g KEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChB KQ0Kc3RydWN0dXJlIEMwX0xvbmdMb25nID0gc3RydWN0IG9wZW4gSW50NjQg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMF9Mb25nTG9uZ19DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAo QSkNCnN0cnVjdHVyZSBDMF9TTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2 NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMwX1NMb25nTG9uZ19DaG9v c2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2 NCAoQSkNCnN0cnVjdHVyZSBDMF9VTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBX b3JkNjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzBfVUxvbmdMb25n X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdv cmROX1dvcmQ2NCAoQSkNCnN0cnVjdHVyZSBDMF9GbG9hdCA9IHN0cnVjdCBv cGVuIFJlYWwzMiB0eXBlIHQgPSByZWFsIGVuZA0KZnVuY3RvciBDMF9GbG9h dF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VS ZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUgQzBfRG91YmxlID0gc3RydWN0 IG9wZW4gUmVhbDY0IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMwX0Rv dWJsZV9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9v c2VSZWFsTl9SZWFsNjQgKEEpDQpzdHJ1Y3R1cmUgQzBfU2l6ZSA9IHN0cnVj dCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMF9T aXplX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29z ZVdvcmROX1dvcmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0dXJlIEMyX0No YXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzJfQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEMyX1NDaGFyID0gc3Ry dWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMyX1ND aGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJ bnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzJfVUNoYXIgPSBzdHJ1Y3Qgb3Bl biBXb3JkOCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMl9VQ2hhcl9D aG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3Jk Tl9Xb3JkOCAoQSkNCnN0cnVjdHVyZSBDMl9TaG9ydCA9IHN0cnVjdCBvcGVu IEludDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzJfU2hvcnRfQ2hv b3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50 MTYgKEEpDQpzdHJ1Y3R1cmUgQzJfU1Nob3J0ID0gc3RydWN0IG9wZW4gSW50 MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMl9TU2hvcnRfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYg KEEpDQpzdHJ1Y3R1cmUgQzJfVVNob3J0ID0gc3RydWN0IG9wZW4gV29yZDE2 IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMyX1VTaG9ydF9DaG9vc2VX b3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3Jk MTYgKEEpDQpzdHJ1Y3R1cmUgQzJfSW50ID0gc3RydWN0IG9wZW4gSW50MzIg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMl9JbnRfQ2hvb3NlSW50TiAo QTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpz dHJ1Y3R1cmUgQzJfU0ludCA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9 IGludCBlbmQNCmZ1bmN0b3IgQzJfU0ludF9DaG9vc2VJbnROIChBOiBDSE9P U0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVy ZSBDMl9VSW50ID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQg ZW5kDQpmdW5jdG9yIEMyX1VJbnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9X T1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJl IEMyX0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5k DQpmdW5jdG9yIEMyX0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzJfU0xv bmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEMyX1NMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMyX1VMb25nID0g c3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9y IEMyX1VMb25nX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9 IENob29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDMl9Mb25nTG9u ZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzJfTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzJfU0xvbmdM b25nID0gc3RydWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVu Y3RvciBDMl9TTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzJfVUxv bmdMb25nID0gc3RydWN0IG9wZW4gV29yZDY0IHR5cGUgdCA9IHdvcmQgZW5k DQpmdW5jdG9yIEMyX1VMb25nTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NF X1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1 cmUgQzJfRmxvYXQgPSBzdHJ1Y3Qgb3BlbiBSZWFsMzIgdHlwZSB0ID0gcmVh bCBlbmQNCmZ1bmN0b3IgQzJfRmxvYXRfQ2hvb3NlUmVhbE4gKEE6IENIT09T RV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDMyIChBKQ0Kc3RydWN0 dXJlIEMyX0RvdWJsZSA9IHN0cnVjdCBvcGVuIFJlYWw2NCB0eXBlIHQgPSBy ZWFsIGVuZA0KZnVuY3RvciBDMl9Eb3VibGVfQ2hvb3NlUmVhbE4gKEE6IENI T09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDY0IChBKQ0Kc3Ry dWN0dXJlIEMyX1NpemUgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0g d29yZCBlbmQNCmZ1bmN0b3IgQzJfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hP T1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCigq IEMgKikNCnN0cnVjdHVyZSBDM19DaGFyID0gc3RydWN0IG9wZW4gSW50OCB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMzX0NoYXJfQ2hvb3NlSW50TiAo QTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0 cnVjdHVyZSBDM19TQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0g aW50IGVuZA0KZnVuY3RvciBDM19TQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9P U0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJl IEMzX1VDaGFyID0gc3RydWN0IG9wZW4gV29yZDggdHlwZSB0ID0gd29yZCBl bmQNCmZ1bmN0b3IgQzNfVUNoYXJfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9X T1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDggKEEpDQpzdHJ1Y3R1cmUg QzNfU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5k DQpmdW5jdG9yIEMzX1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlRO X0FSRykgPSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEMzX1NT aG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1 bmN0b3IgQzNfU1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEMzX1VTaG9y dCA9IHN0cnVjdCBvcGVuIFdvcmQxNiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVu Y3RvciBDM19VU2hvcnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9B UkcpID0gQ2hvb3NlV29yZE5fV29yZDE2IChBKQ0Kc3RydWN0dXJlIEMzX0lu dCA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzNfSW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBD aG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMzX1NJbnQgPSBzdHJ1 Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMzX1NJ bnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUlu dE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzNfVUludCA9IHN0cnVjdCBvcGVu IFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDM19VSW50X0No b29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmRO X1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDM19Mb25nID0gc3RydWN0IG9wZW4g SW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDM19Mb25nX0Nob29z ZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMy IChBKQ0Kc3RydWN0dXJlIEMzX1NMb25nID0gc3RydWN0IG9wZW4gSW50MzIg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDM19TTG9uZ19DaG9vc2VJbnRO IChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkN CnN0cnVjdHVyZSBDM19VTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBl IHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDM19VTG9uZ19DaG9vc2VXb3JkTiAo QTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEp DQpzdHJ1Y3R1cmUgQzNfTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMzX0xvbmdMb25nX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChB KQ0Kc3RydWN0dXJlIEMzX1NMb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0 IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzNfU0xvbmdMb25nX0Nob29z ZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0 IChBKQ0Kc3RydWN0dXJlIEMzX1VMb25nTG9uZyA9IHN0cnVjdCBvcGVuIFdv cmQ2NCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDM19VTG9uZ0xvbmdf Q2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29y ZE5fV29yZDY0IChBKQ0Kc3RydWN0dXJlIEMzX0Zsb2F0ID0gc3RydWN0IG9w ZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMzX0Zsb2F0 X0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJl YWxOX1JlYWwzMiAoQSkNCnN0cnVjdHVyZSBDM19Eb3VibGUgPSBzdHJ1Y3Qg b3BlbiBSZWFsNjQgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzNfRG91 YmxlX0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29z ZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVjdHVyZSBDM19TaXplID0gc3RydWN0 IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMzX1Np emVfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3Nl V29yZE5fV29yZDMyIChBKQ0KDQooKiBDICopDQpzdHJ1Y3R1cmUgQzRfQ2hh ciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDNF9DaGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBD aG9vc2VJbnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzRfU0NoYXIgPSBzdHJ1 Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzRfU0No YXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUlu dE5fSW50OCAoQSkNCnN0cnVjdHVyZSBDNF9VQ2hhciA9IHN0cnVjdCBvcGVu IFdvcmQ4IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM0X1VDaGFyX0No b29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmRO X1dvcmQ4IChBKQ0Kc3RydWN0dXJlIEM0X1Nob3J0ID0gc3RydWN0IG9wZW4g SW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDNF9TaG9ydF9DaG9v c2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQx NiAoQSkNCnN0cnVjdHVyZSBDNF9TU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQx NiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM0X1NTaG9ydF9DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAo QSkNCnN0cnVjdHVyZSBDNF9VU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBXb3JkMTYg dHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzRfVVNob3J0X0Nob29zZVdv cmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQx NiAoQSkNCnN0cnVjdHVyZSBDNF9JbnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM0X0ludF9DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0 cnVjdHVyZSBDNF9TSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0g aW50IGVuZA0KZnVuY3RvciBDNF9TSW50X0Nob29zZUludE4gKEE6IENIT09T RV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJl IEM0X1VJbnQgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0gd29yZCBl bmQNCmZ1bmN0b3IgQzRfVUludF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dP UkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUg QzRfTG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQN CmZ1bmN0b3IgQzRfTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDNF9TTG9u ZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzRfU0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9 IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzRfVUxvbmcgPSBz dHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3Ig QzRfVUxvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0g Q2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJlIEM0X0xvbmdMb25n ID0gc3RydWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDNF9Mb25nTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcp ID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBDNF9TTG9uZ0xv bmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEM0X1NMb25nTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBDNF9VTG9u Z0xvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkNjQgdHlwZSB0ID0gd29yZCBlbmQN CmZ1bmN0b3IgQzRfVUxvbmdMb25nX0Nob29zZVdvcmROIChBOiBDSE9PU0Vf V09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ2NCAoQSkNCnN0cnVjdHVy ZSBDNF9GbG9hdCA9IHN0cnVjdCBvcGVuIFJlYWwzMiB0eXBlIHQgPSByZWFs IGVuZA0KZnVuY3RvciBDNF9GbG9hdF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NF X1JFQUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1 cmUgQzRfRG91YmxlID0gc3RydWN0IG9wZW4gUmVhbDY0IHR5cGUgdCA9IHJl YWwgZW5kDQpmdW5jdG9yIEM0X0RvdWJsZV9DaG9vc2VSZWFsTiAoQTogQ0hP T1NFX1JFQUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFsNjQgKEEpDQpzdHJ1 Y3R1cmUgQzRfU2l6ZSA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3 b3JkIGVuZA0KZnVuY3RvciBDNF9TaXplX0Nob29zZVdvcmROIChBOiBDSE9P U0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkNCg0KKCog QyAqKQ0Kc3RydWN0dXJlIEM1X0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzVfQ2hhcl9DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3Ry dWN0dXJlIEM1X1NDaGFyID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEM1X1NDaGFyX0Nob29zZUludE4gKEE6IENIT09T RV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpzdHJ1Y3R1cmUg QzVfVUNoYXIgPSBzdHJ1Y3Qgb3BlbiBXb3JkOCB0eXBlIHQgPSB3b3JkIGVu ZA0KZnVuY3RvciBDNV9VQ2hhcl9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dP UkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkOCAoQSkNCnN0cnVjdHVyZSBD NV9TaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQN CmZ1bmN0b3IgQzVfU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1cmUgQzVfU1No b3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVu Y3RvciBDNV9TU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1cmUgQzVfVVNob3J0 ID0gc3RydWN0IG9wZW4gV29yZDE2IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5j dG9yIEM1X1VTaG9ydF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FS RykgPSBDaG9vc2VXb3JkTl9Xb3JkMTYgKEEpDQpzdHJ1Y3R1cmUgQzVfSW50 ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDNV9JbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENo b29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzVfU0ludCA9IHN0cnVj dCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzVfU0lu dF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50 Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDNV9VSW50ID0gc3RydWN0IG9wZW4g V29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM1X1VJbnRfQ2hv b3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5f V29yZDMyIChBKQ0Kc3RydWN0dXJlIEM1X0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJ bnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM1X0xvbmdfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIg KEEpDQpzdHJ1Y3R1cmUgQzVfU0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM1X1NMb25nX0Nob29zZUludE4g KEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0K c3RydWN0dXJlIEM1X1VMb25nID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUg dCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM1X1VMb25nX0Nob29zZVdvcmROIChB OiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkN CnN0cnVjdHVyZSBDNV9Mb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzVfTG9uZ0xvbmdfQ2hvb3NlSW50 TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50NjQgKEEp DQpzdHJ1Y3R1cmUgQzVfU0xvbmdMb25nID0gc3RydWN0IG9wZW4gSW50NjQg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDNV9TTG9uZ0xvbmdfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50NjQg KEEpDQpzdHJ1Y3R1cmUgQzVfVUxvbmdMb25nID0gc3RydWN0IG9wZW4gV29y ZDY0IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM1X1VMb25nTG9uZ19D aG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3Jk Tl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUgQzVfRmxvYXQgPSBzdHJ1Y3Qgb3Bl biBSZWFsMzIgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzVfRmxvYXRf Q2hvb3NlUmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVh bE5fUmVhbDMyIChBKQ0Kc3RydWN0dXJlIEM1X0RvdWJsZSA9IHN0cnVjdCBv cGVuIFJlYWw2NCB0eXBlIHQgPSByZWFsIGVuZA0KZnVuY3RvciBDNV9Eb3Vi bGVfQ2hvb3NlUmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hvb3Nl UmVhbE5fUmVhbDY0IChBKQ0Kc3RydWN0dXJlIEM1X1NpemUgPSBzdHJ1Y3Qg b3BlbiBXb3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzVfU2l6 ZV9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VX b3JkTl9Xb3JkMzIgKEEpDQoNCigqIEMgKikNCnN0cnVjdHVyZSBDNl9DaGFy ID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEM2X0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENo b29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVyZSBDNl9TQ2hhciA9IHN0cnVj dCBvcGVuIEludDggdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDNl9TQ2hh cl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50 Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEM2X1VDaGFyID0gc3RydWN0IG9wZW4g V29yZDggdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzZfVUNoYXJfQ2hv b3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5f V29yZDggKEEpDQpzdHJ1Y3R1cmUgQzZfU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJ bnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM2X1Nob3J0X0Nob29z ZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2 IChBKQ0Kc3RydWN0dXJlIEM2X1NTaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2 IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzZfU1Nob3J0X0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2IChB KQ0Kc3RydWN0dXJlIEM2X1VTaG9ydCA9IHN0cnVjdCBvcGVuIFdvcmQxNiB0 eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDNl9VU2hvcnRfQ2hvb3NlV29y ZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDE2 IChBKQ0Kc3RydWN0dXJlIEM2X0ludCA9IHN0cnVjdCBvcGVuIEludDMyIHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzZfSW50X0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3Ry dWN0dXJlIEM2X1NJbnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEM2X1NJbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NF X0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUg QzZfVUludCA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVu ZA0KZnVuY3RvciBDNl9VSW50X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09S RE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBD Nl9Mb25nID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0K ZnVuY3RvciBDNl9Mb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEM2X1NMb25n ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDNl9TTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDNl9VTG9uZyA9IHN0 cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBD Nl9VTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBD aG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzZfTG9uZ0xvbmcg PSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEM2X0xvbmdMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDY0IChBKQ0Kc3RydWN0dXJlIEM2X1NMb25nTG9u ZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzZfU0xvbmdMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDY0IChBKQ0Kc3RydWN0dXJlIEM2X1VMb25n TG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQ2NCB0eXBlIHQgPSB3b3JkIGVuZA0K ZnVuY3RvciBDNl9VTG9uZ0xvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9X T1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDY0IChBKQ0Kc3RydWN0dXJl IEM2X0Zsb2F0ID0gc3RydWN0IG9wZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwg ZW5kDQpmdW5jdG9yIEM2X0Zsb2F0X0Nob29zZVJlYWxOIChBOiBDSE9PU0Vf UkVBTE5fQVJHKSA9IENob29zZVJlYWxOX1JlYWwzMiAoQSkNCnN0cnVjdHVy ZSBDNl9Eb3VibGUgPSBzdHJ1Y3Qgb3BlbiBSZWFsNjQgdHlwZSB0ID0gcmVh bCBlbmQNCmZ1bmN0b3IgQzZfRG91YmxlX0Nob29zZVJlYWxOIChBOiBDSE9P U0VfUkVBTE5fQVJHKSA9IENob29zZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVj dHVyZSBDNl9TaXplID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdv cmQgZW5kDQpmdW5jdG9yIEM2X1NpemVfQ2hvb3NlV29yZE4gKEE6IENIT09T RV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0KDQooKiBD ICopDQpzdHJ1Y3R1cmUgQzdfQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDN19DaGFyX0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpzdHJ1 Y3R1cmUgQzdfU0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGlu dCBlbmQNCmZ1bmN0b3IgQzdfU0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NF X0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVyZSBD N19VQ2hhciA9IHN0cnVjdCBvcGVuIFdvcmQ4IHR5cGUgdCA9IHdvcmQgZW5k DQpmdW5jdG9yIEM3X1VDaGFyX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09S RE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ4IChBKQ0Kc3RydWN0dXJlIEM3 X1Nob3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0K ZnVuY3RvciBDN19TaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDN19TU2hv cnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEM3X1NTaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcp ID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDN19VU2hvcnQg PSBzdHJ1Y3Qgb3BlbiBXb3JkMTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0 b3IgQzdfVVNob3J0X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJH KSA9IENob29zZVdvcmROX1dvcmQxNiAoQSkNCnN0cnVjdHVyZSBDN19JbnQg PSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEM3X0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hv b3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDN19TSW50ID0gc3RydWN0 IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDN19TSW50 X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnRO X0ludDMyIChBKQ0Kc3RydWN0dXJlIEM3X1VJbnQgPSBzdHJ1Y3Qgb3BlbiBX b3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzdfVUludF9DaG9v c2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9X b3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzdfTG9uZyA9IHN0cnVjdCBvcGVuIElu dDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzdfTG9uZ19DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAo QSkNCnN0cnVjdHVyZSBDN19TTG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzdfU0xvbmdfQ2hvb3NlSW50TiAo QTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpz dHJ1Y3R1cmUgQzdfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0 ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzdfVUxvbmdfQ2hvb3NlV29yZE4gKEE6 IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0K c3RydWN0dXJlIEM3X0xvbmdMb25nID0gc3RydWN0IG9wZW4gSW50NjQgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDN19Mb25nTG9uZ19DaG9vc2VJbnRO IChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkN CnN0cnVjdHVyZSBDN19TTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM3X1NMb25nTG9uZ19DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAo QSkNCnN0cnVjdHVyZSBDN19VTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3Jk NjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzdfVUxvbmdMb25nX0No b29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmRO X1dvcmQ2NCAoQSkNCnN0cnVjdHVyZSBDN19GbG9hdCA9IHN0cnVjdCBvcGVu IFJlYWwzMiB0eXBlIHQgPSByZWFsIGVuZA0KZnVuY3RvciBDN19GbG9hdF9D aG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VSZWFs Tl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUgQzdfRG91YmxlID0gc3RydWN0IG9w ZW4gUmVhbDY0IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEM3X0RvdWJs ZV9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VS ZWFsTl9SZWFsNjQgKEEpDQpzdHJ1Y3R1cmUgQzdfU2l6ZSA9IHN0cnVjdCBv cGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDN19TaXpl X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdv cmROX1dvcmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0dXJlIEM4X0NoYXIg PSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3Ig QzhfQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hv b3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEM4X1NDaGFyID0gc3RydWN0 IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM4X1NDaGFy X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnRO X0ludDggKEEpDQpzdHJ1Y3R1cmUgQzhfVUNoYXIgPSBzdHJ1Y3Qgb3BlbiBX b3JkOCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDOF9VQ2hhcl9DaG9v c2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9X b3JkOCAoQSkNCnN0cnVjdHVyZSBDOF9TaG9ydCA9IHN0cnVjdCBvcGVuIElu dDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzhfU2hvcnRfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYg KEEpDQpzdHJ1Y3R1cmUgQzhfU1Nob3J0ID0gc3RydWN0IG9wZW4gSW50MTYg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDOF9TU2hvcnRfQ2hvb3NlSW50 TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYgKEEp DQpzdHJ1Y3R1cmUgQzhfVVNob3J0ID0gc3RydWN0IG9wZW4gV29yZDE2IHR5 cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM4X1VTaG9ydF9DaG9vc2VXb3Jk TiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMTYg KEEpDQpzdHJ1Y3R1cmUgQzhfSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDOF9JbnRfQ2hvb3NlSW50TiAoQTog Q0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1 Y3R1cmUgQzhfU0ludCA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGlu dCBlbmQNCmZ1bmN0b3IgQzhfU0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0Vf SU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBD OF9VSW50ID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5k DQpmdW5jdG9yIEM4X1VJbnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JE Tl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJlIEM4 X0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEM4X0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzhfU0xvbmcg PSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEM4X1NMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBD aG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEM4X1VMb25nID0gc3Ry dWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM4 X1VMb25nX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENo b29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDOF9Mb25nTG9uZyA9 IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3Ig QzhfTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9 IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzhfU0xvbmdMb25n ID0gc3RydWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDOF9TTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzhfVUxvbmdM b25nID0gc3RydWN0IG9wZW4gV29yZDY0IHR5cGUgdCA9IHdvcmQgZW5kDQpm dW5jdG9yIEM4X1VMb25nTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dP UkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUg QzhfRmxvYXQgPSBzdHJ1Y3Qgb3BlbiBSZWFsMzIgdHlwZSB0ID0gcmVhbCBl bmQNCmZ1bmN0b3IgQzhfRmxvYXRfQ2hvb3NlUmVhbE4gKEE6IENIT09TRV9S RUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDMyIChBKQ0Kc3RydWN0dXJl IEM4X0RvdWJsZSA9IHN0cnVjdCBvcGVuIFJlYWw2NCB0eXBlIHQgPSByZWFs IGVuZA0KZnVuY3RvciBDOF9Eb3VibGVfQ2hvb3NlUmVhbE4gKEE6IENIT09T RV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDY0IChBKQ0Kc3RydWN0 dXJlIEM4X1NpemUgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0gd29y ZCBlbmQNCmZ1bmN0b3IgQzhfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hPT1NF X1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCigqIEMg KikNCnN0cnVjdHVyZSBDOV9DaGFyID0gc3RydWN0IG9wZW4gSW50OCB0eXBl IHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM5X0NoYXJfQ2hvb3NlSW50TiAoQTog Q0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVj dHVyZSBDOV9TQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0gaW50 IGVuZA0KZnVuY3RvciBDOV9TQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0Vf SU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEM5 X1VDaGFyID0gc3RydWN0IG9wZW4gV29yZDggdHlwZSB0ID0gd29yZCBlbmQN CmZ1bmN0b3IgQzlfVUNoYXJfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JE Tl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDggKEEpDQpzdHJ1Y3R1cmUgQzlf U2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEM5X1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEM5X1NTaG9y dCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzlfU1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEM5X1VTaG9ydCA9 IHN0cnVjdCBvcGVuIFdvcmQxNiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3Rv ciBDOV9VU2hvcnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcp ID0gQ2hvb3NlV29yZE5fV29yZDE2IChBKQ0Kc3RydWN0dXJlIEM5X0ludCA9 IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3Ig QzlfSW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9v c2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEM5X1NJbnQgPSBzdHJ1Y3Qg b3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM5X1NJbnRf Q2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5f SW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzlfVUludCA9IHN0cnVjdCBvcGVuIFdv cmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDOV9VSW50X0Nob29z ZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dv cmQzMiAoQSkNCnN0cnVjdHVyZSBDOV9Mb25nID0gc3RydWN0IG9wZW4gSW50 MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDOV9Mb25nX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChB KQ0Kc3RydWN0dXJlIEM5X1NMb25nID0gc3RydWN0IG9wZW4gSW50MzIgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDOV9TTG9uZ19DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0 cnVjdHVyZSBDOV9VTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQg PSB3b3JkIGVuZA0KZnVuY3RvciBDOV9VTG9uZ19DaG9vc2VXb3JkTiAoQTog Q0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpz dHJ1Y3R1cmUgQzlfTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBl IHQgPSBpbnQgZW5kDQpmdW5jdG9yIEM5X0xvbmdMb25nX0Nob29zZUludE4g KEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChBKQ0K c3RydWN0dXJlIEM5X1NMb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzlfU0xvbmdMb25nX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChB KQ0Kc3RydWN0dXJlIEM5X1VMb25nTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQ2 NCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDOV9VTG9uZ0xvbmdfQ2hv b3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5f V29yZDY0IChBKQ0Kc3RydWN0dXJlIEM5X0Zsb2F0ID0gc3RydWN0IG9wZW4g UmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEM5X0Zsb2F0X0No b29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJlYWxO X1JlYWwzMiAoQSkNCnN0cnVjdHVyZSBDOV9Eb3VibGUgPSBzdHJ1Y3Qgb3Bl biBSZWFsNjQgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzlfRG91Ymxl X0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJl YWxOX1JlYWw2NCAoQSkNCnN0cnVjdHVyZSBDOV9TaXplID0gc3RydWN0IG9w ZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEM5X1NpemVf Q2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29y ZE5fV29yZDMyIChBKQ0KDQooKiBDICopDQpzdHJ1Y3R1cmUgQzEwX0NoYXIg PSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3Ig QzEwX0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENo b29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVyZSBDMTBfU0NoYXIgPSBzdHJ1 Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEwX1ND aGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJ bnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzEwX1VDaGFyID0gc3RydWN0IG9w ZW4gV29yZDggdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzEwX1VDaGFy X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdv cmROX1dvcmQ4IChBKQ0Kc3RydWN0dXJlIEMxMF9TaG9ydCA9IHN0cnVjdCBv cGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEwX1Nob3J0 X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnRO X0ludDE2IChBKQ0Kc3RydWN0dXJlIEMxMF9TU2hvcnQgPSBzdHJ1Y3Qgb3Bl biBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxMF9TU2hvcnRf Q2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5f SW50MTYgKEEpDQpzdHJ1Y3R1cmUgQzEwX1VTaG9ydCA9IHN0cnVjdCBvcGVu IFdvcmQxNiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTBfVVNob3J0 X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdv cmROX1dvcmQxNiAoQSkNCnN0cnVjdHVyZSBDMTBfSW50ID0gc3RydWN0IG9w ZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTBfSW50X0No b29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0lu dDMyIChBKQ0Kc3RydWN0dXJlIEMxMF9TSW50ID0gc3RydWN0IG9wZW4gSW50 MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTBfU0ludF9DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAo QSkNCnN0cnVjdHVyZSBDMTBfVUludCA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0 eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTBfVUludF9DaG9vc2VXb3Jk TiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIg KEEpDQpzdHJ1Y3R1cmUgQzEwX0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxMF9Mb25nX0Nob29zZUludE4g KEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0K c3RydWN0dXJlIEMxMF9TTG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUg dCA9IGludCBlbmQNCmZ1bmN0b3IgQzEwX1NMb25nX0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3Ry dWN0dXJlIEMxMF9VTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQg PSB3b3JkIGVuZA0KZnVuY3RvciBDMTBfVUxvbmdfQ2hvb3NlV29yZE4gKEE6 IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0K c3RydWN0dXJlIEMxMF9Mb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEwX0xvbmdMb25nX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChB KQ0Kc3RydWN0dXJlIEMxMF9TTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2 NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxMF9TTG9uZ0xvbmdfQ2hv b3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50 NjQgKEEpDQpzdHJ1Y3R1cmUgQzEwX1VMb25nTG9uZyA9IHN0cnVjdCBvcGVu IFdvcmQ2NCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTBfVUxvbmdM b25nX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29z ZVdvcmROX1dvcmQ2NCAoQSkNCnN0cnVjdHVyZSBDMTBfRmxvYXQgPSBzdHJ1 Y3Qgb3BlbiBSZWFsMzIgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzEw X0Zsb2F0X0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENo b29zZVJlYWxOX1JlYWwzMiAoQSkNCnN0cnVjdHVyZSBDMTBfRG91YmxlID0g c3RydWN0IG9wZW4gUmVhbDY0IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9y IEMxMF9Eb3VibGVfQ2hvb3NlUmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcp ID0gQ2hvb3NlUmVhbE5fUmVhbDY0IChBKQ0Kc3RydWN0dXJlIEMxMF9TaXpl ID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5j dG9yIEMxMF9TaXplX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJH KSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0 dXJlIEMxMV9DaGFyID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQg ZW5kDQpmdW5jdG9yIEMxMV9DaGFyX0Nob29zZUludE4gKEE6IENIT09TRV9J TlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzEx X1NDaGFyID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEMxMV9TQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEMxMV9VQ2hh ciA9IHN0cnVjdCBvcGVuIFdvcmQ4IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5j dG9yIEMxMV9VQ2hhcl9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FS RykgPSBDaG9vc2VXb3JkTl9Xb3JkOCAoQSkNCnN0cnVjdHVyZSBDMTFfU2hv cnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEMxMV9TaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcp ID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMTFfU1Nob3J0 ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDMTFfU1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEMxMV9VU2hvcnQg PSBzdHJ1Y3Qgb3BlbiBXb3JkMTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0 b3IgQzExX1VTaG9ydF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FS RykgPSBDaG9vc2VXb3JkTl9Xb3JkMTYgKEEpDQpzdHJ1Y3R1cmUgQzExX0lu dCA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzExX0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDMTFfU0ludCA9IHN0 cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEx X1NJbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29z ZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzExX1VJbnQgPSBzdHJ1Y3Qg b3BlbiBXb3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzExX1VJ bnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3Nl V29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJlIEMxMV9Mb25nID0gc3RydWN0 IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTFfTG9u Z19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50 Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDMTFfU0xvbmcgPSBzdHJ1Y3Qgb3Bl biBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxMV9TTG9uZ19D aG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9J bnQzMiAoQSkNCnN0cnVjdHVyZSBDMTFfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBX b3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzExX1VMb25nX0No b29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmRO X1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDMTFfTG9uZ0xvbmcgPSBzdHJ1Y3Qg b3BlbiBJbnQ2NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxMV9Mb25n TG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3Nl SW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBDMTFfU0xvbmdMb25nID0gc3Ry dWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTFf U0xvbmdMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBD aG9vc2VJbnROX0ludDY0IChBKQ0Kc3RydWN0dXJlIEMxMV9VTG9uZ0xvbmcg PSBzdHJ1Y3Qgb3BlbiBXb3JkNjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0 b3IgQzExX1VMb25nTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkRO X0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUgQzEx X0Zsb2F0ID0gc3RydWN0IG9wZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5k DQpmdW5jdG9yIEMxMV9GbG9hdF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JF QUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUg QzExX0RvdWJsZSA9IHN0cnVjdCBvcGVuIFJlYWw2NCB0eXBlIHQgPSByZWFs IGVuZA0KZnVuY3RvciBDMTFfRG91YmxlX0Nob29zZVJlYWxOIChBOiBDSE9P U0VfUkVBTE5fQVJHKSA9IENob29zZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVj dHVyZSBDMTFfU2l6ZSA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3 b3JkIGVuZA0KZnVuY3RvciBDMTFfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hP T1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCigq IEMgKikNCnN0cnVjdHVyZSBDMTJfQ2hhciA9IHN0cnVjdCBvcGVuIEludDgg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTJfQ2hhcl9DaG9vc2VJbnRO IChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0K c3RydWN0dXJlIEMxMl9TQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0 ID0gaW50IGVuZA0KZnVuY3RvciBDMTJfU0NoYXJfQ2hvb3NlSW50TiAoQTog Q0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVj dHVyZSBDMTJfVUNoYXIgPSBzdHJ1Y3Qgb3BlbiBXb3JkOCB0eXBlIHQgPSB3 b3JkIGVuZA0KZnVuY3RvciBDMTJfVUNoYXJfQ2hvb3NlV29yZE4gKEE6IENI T09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDggKEEpDQpzdHJ1 Y3R1cmUgQzEyX1Nob3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0g aW50IGVuZA0KZnVuY3RvciBDMTJfU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hP T1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1 cmUgQzEyX1NTaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGlu dCBlbmQNCmZ1bmN0b3IgQzEyX1NTaG9ydF9DaG9vc2VJbnROIChBOiBDSE9P U0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVy ZSBDMTJfVVNob3J0ID0gc3RydWN0IG9wZW4gV29yZDE2IHR5cGUgdCA9IHdv cmQgZW5kDQpmdW5jdG9yIEMxMl9VU2hvcnRfQ2hvb3NlV29yZE4gKEE6IENI T09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDE2IChBKQ0Kc3Ry dWN0dXJlIEMxMl9JbnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEMxMl9JbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NF X0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUg QzEyX1NJbnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5k DQpmdW5jdG9yIEMxMl9TSW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlRO X0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxMl9V SW50ID0gc3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpm dW5jdG9yIEMxMl9VSW50X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5f QVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDMTJf TG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1 bmN0b3IgQzEyX0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzEyX1NMb25n ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3Rv ciBDMTJfU0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9 IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzEyX1VMb25nID0g c3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9y IEMxMl9VTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykg PSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzEyX0xvbmdM b25nID0gc3RydWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVu Y3RvciBDMTJfTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzEyX1NM b25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQN CmZ1bmN0b3IgQzEyX1NMb25nTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0Vf SU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBD MTJfVUxvbmdMb25nID0gc3RydWN0IG9wZW4gV29yZDY0IHR5cGUgdCA9IHdv cmQgZW5kDQpmdW5jdG9yIEMxMl9VTG9uZ0xvbmdfQ2hvb3NlV29yZE4gKEE6 IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDY0IChBKQ0K c3RydWN0dXJlIEMxMl9GbG9hdCA9IHN0cnVjdCBvcGVuIFJlYWwzMiB0eXBl IHQgPSByZWFsIGVuZA0KZnVuY3RvciBDMTJfRmxvYXRfQ2hvb3NlUmVhbE4g KEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDMyIChB KQ0Kc3RydWN0dXJlIEMxMl9Eb3VibGUgPSBzdHJ1Y3Qgb3BlbiBSZWFsNjQg dHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzEyX0RvdWJsZV9DaG9vc2VS ZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFs NjQgKEEpDQpzdHJ1Y3R1cmUgQzEyX1NpemUgPSBzdHJ1Y3Qgb3BlbiBXb3Jk MzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzEyX1NpemVfQ2hvb3Nl V29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29y ZDMyIChBKQ0KDQooKiBDICopDQpzdHJ1Y3R1cmUgQzEzX0NoYXIgPSBzdHJ1 Y3Qgb3BlbiBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEzX0No YXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUlu dE5fSW50OCAoQSkNCnN0cnVjdHVyZSBDMTNfU0NoYXIgPSBzdHJ1Y3Qgb3Bl biBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEzX1NDaGFyX0No b29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0lu dDggKEEpDQpzdHJ1Y3R1cmUgQzEzX1VDaGFyID0gc3RydWN0IG9wZW4gV29y ZDggdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzEzX1VDaGFyX0Nob29z ZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dv cmQ4IChBKQ0Kc3RydWN0dXJlIEMxM19TaG9ydCA9IHN0cnVjdCBvcGVuIElu dDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzEzX1Nob3J0X0Nob29z ZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2 IChBKQ0Kc3RydWN0dXJlIEMxM19TU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQx NiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxM19TU2hvcnRfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYg KEEpDQpzdHJ1Y3R1cmUgQzEzX1VTaG9ydCA9IHN0cnVjdCBvcGVuIFdvcmQx NiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTNfVVNob3J0X0Nob29z ZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dv cmQxNiAoQSkNCnN0cnVjdHVyZSBDMTNfSW50ID0gc3RydWN0IG9wZW4gSW50 MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTNfSW50X0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChB KQ0Kc3RydWN0dXJlIEMxM19TSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTNfU0ludF9DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0 cnVjdHVyZSBDMTNfVUludCA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQg PSB3b3JkIGVuZA0KZnVuY3RvciBDMTNfVUludF9DaG9vc2VXb3JkTiAoQTog Q0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpz dHJ1Y3R1cmUgQzEzX0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQg PSBpbnQgZW5kDQpmdW5jdG9yIEMxM19Mb25nX0Nob29zZUludE4gKEE6IENI T09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0 dXJlIEMxM19TTG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGlu dCBlbmQNCmZ1bmN0b3IgQzEzX1NMb25nX0Nob29zZUludE4gKEE6IENIT09T RV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJl IEMxM19VTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3Jk IGVuZA0KZnVuY3RvciBDMTNfVUxvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09T RV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0 dXJlIEMxM19Mb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9 IGludCBlbmQNCmZ1bmN0b3IgQzEzX0xvbmdMb25nX0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChBKQ0Kc3Ry dWN0dXJlIEMxM19TTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBl IHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxM19TTG9uZ0xvbmdfQ2hvb3NlSW50 TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50NjQgKEEp DQpzdHJ1Y3R1cmUgQzEzX1VMb25nTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQ2 NCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTNfVUxvbmdMb25nX0No b29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmRO X1dvcmQ2NCAoQSkNCnN0cnVjdHVyZSBDMTNfRmxvYXQgPSBzdHJ1Y3Qgb3Bl biBSZWFsMzIgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzEzX0Zsb2F0 X0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJl YWxOX1JlYWwzMiAoQSkNCnN0cnVjdHVyZSBDMTNfRG91YmxlID0gc3RydWN0 IG9wZW4gUmVhbDY0IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMxM19E b3VibGVfQ2hvb3NlUmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hv b3NlUmVhbE5fUmVhbDY0IChBKQ0Kc3RydWN0dXJlIEMxM19TaXplID0gc3Ry dWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMx M19TaXplX0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENo b29zZVdvcmROX1dvcmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0dXJlIEMx NF9DaGFyID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEMxNF9DaGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzE0X1NDaGFy ID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEMxNF9TQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEMxNF9VQ2hhciA9IHN0 cnVjdCBvcGVuIFdvcmQ4IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMx NF9VQ2hhcl9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBD aG9vc2VXb3JkTl9Xb3JkOCAoQSkNCnN0cnVjdHVyZSBDMTRfU2hvcnQgPSBz dHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMx NF9TaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hv b3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMTRfU1Nob3J0ID0gc3Ry dWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTRf U1Nob3J0X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9v c2VJbnROX0ludDE2IChBKQ0Kc3RydWN0dXJlIEMxNF9VU2hvcnQgPSBzdHJ1 Y3Qgb3BlbiBXb3JkMTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE0 X1VTaG9ydF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBD aG9vc2VXb3JkTl9Xb3JkMTYgKEEpDQpzdHJ1Y3R1cmUgQzE0X0ludCA9IHN0 cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE0 X0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3Nl SW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDMTRfU0ludCA9IHN0cnVjdCBv cGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE0X1NJbnRf Q2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5f SW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE0X1VJbnQgPSBzdHJ1Y3Qgb3BlbiBX b3JkMzIgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE0X1VJbnRfQ2hv b3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5f V29yZDMyIChBKQ0Kc3RydWN0dXJlIEMxNF9Mb25nID0gc3RydWN0IG9wZW4g SW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTRfTG9uZ19DaG9v c2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQz MiAoQSkNCnN0cnVjdHVyZSBDMTRfU0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQz MiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxNF9TTG9uZ19DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAo QSkNCnN0cnVjdHVyZSBDMTRfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIg dHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE0X1VMb25nX0Nob29zZVdv cmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQz MiAoQSkNCnN0cnVjdHVyZSBDMTRfTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJ bnQ2NCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxNF9Mb25nTG9uZ19D aG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9J bnQ2NCAoQSkNCnN0cnVjdHVyZSBDMTRfU0xvbmdMb25nID0gc3RydWN0IG9w ZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTRfU0xvbmdM b25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJ bnROX0ludDY0IChBKQ0Kc3RydWN0dXJlIEMxNF9VTG9uZ0xvbmcgPSBzdHJ1 Y3Qgb3BlbiBXb3JkNjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE0 X1VMb25nTG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykg PSBDaG9vc2VXb3JkTl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUgQzE0X0Zsb2F0 ID0gc3RydWN0IG9wZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5j dG9yIEMxNF9GbG9hdF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FS RykgPSBDaG9vc2VSZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUgQzE0X0Rv dWJsZSA9IHN0cnVjdCBvcGVuIFJlYWw2NCB0eXBlIHQgPSByZWFsIGVuZA0K ZnVuY3RvciBDMTRfRG91YmxlX0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVB TE5fQVJHKSA9IENob29zZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVjdHVyZSBD MTRfU2l6ZSA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVu ZA0KZnVuY3RvciBDMTRfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dP UkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCigqIEMgKikN CnN0cnVjdHVyZSBDMTVfQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0 ID0gaW50IGVuZA0KZnVuY3RvciBDMTVfQ2hhcl9DaG9vc2VJbnROIChBOiBD SE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0 dXJlIEMxNV9TQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0gaW50 IGVuZA0KZnVuY3RvciBDMTVfU0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NF X0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVyZSBD MTVfVUNoYXIgPSBzdHJ1Y3Qgb3BlbiBXb3JkOCB0eXBlIHQgPSB3b3JkIGVu ZA0KZnVuY3RvciBDMTVfVUNoYXJfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9X T1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDggKEEpDQpzdHJ1Y3R1cmUg QzE1X1Nob3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVu ZA0KZnVuY3RvciBDMTVfU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lO VE5fQVJHKSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1cmUgQzE1 X1NTaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQN CmZ1bmN0b3IgQzE1X1NTaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5U Tl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMTVf VVNob3J0ID0gc3RydWN0IG9wZW4gV29yZDE2IHR5cGUgdCA9IHdvcmQgZW5k DQpmdW5jdG9yIEMxNV9VU2hvcnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9X T1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDE2IChBKQ0Kc3RydWN0dXJl IEMxNV9JbnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5k DQpmdW5jdG9yIEMxNV9JbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE1X1NJ bnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEMxNV9TSW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxNV9VSW50ID0g c3RydWN0IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9y IEMxNV9VSW50X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9 IENob29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDMTVfTG9uZyA9 IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3Ig QzE1X0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENo b29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE1X1NMb25nID0gc3Ry dWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTVf U0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29z ZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE1X1VMb25nID0gc3RydWN0 IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxNV9V TG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9v c2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzE1X0xvbmdMb25nID0g c3RydWN0IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBD MTVfTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9 IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzE1X1NMb25nTG9u ZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzE1X1NMb25nTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9B UkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBDMTVfVUxv bmdMb25nID0gc3RydWN0IG9wZW4gV29yZDY0IHR5cGUgdCA9IHdvcmQgZW5k DQpmdW5jdG9yIEMxNV9VTG9uZ0xvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09T RV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDY0IChBKQ0Kc3RydWN0 dXJlIEMxNV9GbG9hdCA9IHN0cnVjdCBvcGVuIFJlYWwzMiB0eXBlIHQgPSBy ZWFsIGVuZA0KZnVuY3RvciBDMTVfRmxvYXRfQ2hvb3NlUmVhbE4gKEE6IENI T09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDMyIChBKQ0Kc3Ry dWN0dXJlIEMxNV9Eb3VibGUgPSBzdHJ1Y3Qgb3BlbiBSZWFsNjQgdHlwZSB0 ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzE1X0RvdWJsZV9DaG9vc2VSZWFsTiAo QTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFsNjQgKEEp DQpzdHJ1Y3R1cmUgQzE1X1NpemUgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlw ZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE1X1NpemVfQ2hvb3NlV29yZE4g KEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChB KQ0KDQooKiBDICopDQpzdHJ1Y3R1cmUgQzE2X0NoYXIgPSBzdHJ1Y3Qgb3Bl biBJbnQ4IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE2X0NoYXJfQ2hv b3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50 OCAoQSkNCnN0cnVjdHVyZSBDMTZfU0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4 IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE2X1NDaGFyX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEp DQpzdHJ1Y3R1cmUgQzE2X1VDaGFyID0gc3RydWN0IG9wZW4gV29yZDggdHlw ZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE2X1VDaGFyX0Nob29zZVdvcmRO IChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ4IChB KQ0Kc3RydWN0dXJlIEMxNl9TaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE2X1Nob3J0X0Nob29zZUludE4g KEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2IChBKQ0K c3RydWN0dXJlIEMxNl9TU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBl IHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxNl9TU2hvcnRfQ2hvb3NlSW50TiAo QTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYgKEEpDQpz dHJ1Y3R1cmUgQzE2X1VTaG9ydCA9IHN0cnVjdCBvcGVuIFdvcmQxNiB0eXBl IHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTZfVVNob3J0X0Nob29zZVdvcmRO IChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQxNiAo QSkNCnN0cnVjdHVyZSBDMTZfSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTZfSW50X0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3Ry dWN0dXJlIEMxNl9TSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0g aW50IGVuZA0KZnVuY3RvciBDMTZfU0ludF9DaG9vc2VJbnROIChBOiBDSE9P U0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVy ZSBDMTZfVUludCA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3Jk IGVuZA0KZnVuY3RvciBDMTZfVUludF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NF X1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1 cmUgQzE2X0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQg ZW5kDQpmdW5jdG9yIEMxNl9Mb25nX0Nob29zZUludE4gKEE6IENIT09TRV9J TlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMx Nl9TTG9uZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQN CmZ1bmN0b3IgQzE2X1NMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlRO X0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxNl9V TG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0K ZnVuY3RvciBDMTZfVUxvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JE Tl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJlIEMx Nl9Mb25nTG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBl bmQNCmZ1bmN0b3IgQzE2X0xvbmdMb25nX0Nob29zZUludE4gKEE6IENIT09T RV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChBKQ0Kc3RydWN0dXJl IEMxNl9TTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEMxNl9TTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTog Q0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1 Y3R1cmUgQzE2X1VMb25nTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQ2NCB0eXBl IHQgPSB3b3JkIGVuZA0KZnVuY3RvciBDMTZfVUxvbmdMb25nX0Nob29zZVdv cmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ2 NCAoQSkNCnN0cnVjdHVyZSBDMTZfRmxvYXQgPSBzdHJ1Y3Qgb3BlbiBSZWFs MzIgdHlwZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzE2X0Zsb2F0X0Nob29z ZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJlYWxOX1Jl YWwzMiAoQSkNCnN0cnVjdHVyZSBDMTZfRG91YmxlID0gc3RydWN0IG9wZW4g UmVhbDY0IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMxNl9Eb3VibGVf Q2hvb3NlUmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVh bE5fUmVhbDY0IChBKQ0Kc3RydWN0dXJlIEMxNl9TaXplID0gc3RydWN0IG9w ZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxNl9TaXpl X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdv cmROX1dvcmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0dXJlIEMxN19DaGFy ID0gc3RydWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9y IEMxN19DaGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBD aG9vc2VJbnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzE3X1NDaGFyID0gc3Ry dWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxN19T Q2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3Nl SW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEMxN19VQ2hhciA9IHN0cnVjdCBv cGVuIFdvcmQ4IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxN19VQ2hh cl9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VX b3JkTl9Xb3JkOCAoQSkNCnN0cnVjdHVyZSBDMTdfU2hvcnQgPSBzdHJ1Y3Qg b3BlbiBJbnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxN19TaG9y dF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50 Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMTdfU1Nob3J0ID0gc3RydWN0IG9w ZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTdfU1Nob3J0 X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnRO X0ludDE2IChBKQ0Kc3RydWN0dXJlIEMxN19VU2hvcnQgPSBzdHJ1Y3Qgb3Bl biBXb3JkMTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE3X1VTaG9y dF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VX b3JkTl9Xb3JkMTYgKEEpDQpzdHJ1Y3R1cmUgQzE3X0ludCA9IHN0cnVjdCBv cGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE3X0ludF9D aG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9J bnQzMiAoQSkNCnN0cnVjdHVyZSBDMTdfU0ludCA9IHN0cnVjdCBvcGVuIElu dDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE3X1NJbnRfQ2hvb3Nl SW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIg KEEpDQpzdHJ1Y3R1cmUgQzE3X1VJbnQgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIg dHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE3X1VJbnRfQ2hvb3NlV29y ZE4gKEE6IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMy IChBKQ0Kc3RydWN0dXJlIEMxN19Mb25nID0gc3RydWN0IG9wZW4gSW50MzIg dHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTdfTG9uZ19DaG9vc2VJbnRO IChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkN CnN0cnVjdHVyZSBDMTdfU0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBl IHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxN19TTG9uZ19DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0 cnVjdHVyZSBDMTdfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0 ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE3X1VMb25nX0Nob29zZVdvcmROIChB OiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkN CnN0cnVjdHVyZSBDMTdfTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0 eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMxN19Mb25nTG9uZ19DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAo QSkNCnN0cnVjdHVyZSBDMTdfU0xvbmdMb25nID0gc3RydWN0IG9wZW4gSW50 NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMTdfU0xvbmdMb25nX0No b29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0lu dDY0IChBKQ0Kc3RydWN0dXJlIEMxN19VTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3Bl biBXb3JkNjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzE3X1VMb25n TG9uZ19DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9v c2VXb3JkTl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUgQzE3X0Zsb2F0ID0gc3Ry dWN0IG9wZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMx N19GbG9hdF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBD aG9vc2VSZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUgQzE3X0RvdWJsZSA9 IHN0cnVjdCBvcGVuIFJlYWw2NCB0eXBlIHQgPSByZWFsIGVuZA0KZnVuY3Rv ciBDMTdfRG91YmxlX0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJH KSA9IENob29zZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVjdHVyZSBDMTdfU2l6 ZSA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVu Y3RvciBDMTdfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FS RykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCigqIEMgKikNCnN0cnVj dHVyZSBDMThfQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0gaW50 IGVuZA0KZnVuY3RvciBDMThfQ2hhcl9DaG9vc2VJbnROIChBOiBDSE9PU0Vf SU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ4IChBKQ0Kc3RydWN0dXJlIEMx OF9TQ2hhciA9IHN0cnVjdCBvcGVuIEludDggdHlwZSB0ID0gaW50IGVuZA0K ZnVuY3RvciBDMThfU0NoYXJfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5f QVJHKSA9IENob29zZUludE5fSW50OCAoQSkNCnN0cnVjdHVyZSBDMThfVUNo YXIgPSBzdHJ1Y3Qgb3BlbiBXb3JkOCB0eXBlIHQgPSB3b3JkIGVuZA0KZnVu Y3RvciBDMThfVUNoYXJfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9B UkcpID0gQ2hvb3NlV29yZE5fV29yZDggKEEpDQpzdHJ1Y3R1cmUgQzE4X1No b3J0ID0gc3RydWN0IG9wZW4gSW50MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVu Y3RvciBDMThfU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJH KSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1cmUgQzE4X1NTaG9y dCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzE4X1NTaG9ydF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcp ID0gQ2hvb3NlSW50Tl9JbnQxNiAoQSkNCnN0cnVjdHVyZSBDMThfVVNob3J0 ID0gc3RydWN0IG9wZW4gV29yZDE2IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5j dG9yIEMxOF9VU2hvcnRfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9B UkcpID0gQ2hvb3NlV29yZE5fV29yZDE2IChBKQ0Kc3RydWN0dXJlIEMxOF9J bnQgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5j dG9yIEMxOF9JbnRfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9 IENob29zZUludE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE4X1NJbnQgPSBz dHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMx OF9TSW50X0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9v c2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxOF9VSW50ID0gc3RydWN0 IG9wZW4gV29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxOF9V SW50X0Nob29zZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29z ZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVjdHVyZSBDMThfTG9uZyA9IHN0cnVj dCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE4X0xv bmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUlu dE5fSW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE4X1NMb25nID0gc3RydWN0IG9w ZW4gSW50MzIgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMThfU0xvbmdf Q2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5f SW50MzIgKEEpDQpzdHJ1Y3R1cmUgQzE4X1VMb25nID0gc3RydWN0IG9wZW4g V29yZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxOF9VTG9uZ19D aG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3Jk Tl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzE4X0xvbmdMb25nID0gc3RydWN0 IG9wZW4gSW50NjQgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMThfTG9u Z0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29z ZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUgQzE4X1NMb25nTG9uZyA9IHN0 cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE4 X1NMb25nTG9uZ19DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0g Q2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0cnVjdHVyZSBDMThfVUxvbmdMb25n ID0gc3RydWN0IG9wZW4gV29yZDY0IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5j dG9yIEMxOF9VTG9uZ0xvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JE Tl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDY0IChBKQ0Kc3RydWN0dXJlIEMx OF9GbG9hdCA9IHN0cnVjdCBvcGVuIFJlYWwzMiB0eXBlIHQgPSByZWFsIGVu ZA0KZnVuY3RvciBDMThfRmxvYXRfQ2hvb3NlUmVhbE4gKEE6IENIT09TRV9S RUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVhbDMyIChBKQ0Kc3RydWN0dXJl IEMxOF9Eb3VibGUgPSBzdHJ1Y3Qgb3BlbiBSZWFsNjQgdHlwZSB0ID0gcmVh bCBlbmQNCmZ1bmN0b3IgQzE4X0RvdWJsZV9DaG9vc2VSZWFsTiAoQTogQ0hP T1NFX1JFQUxOX0FSRykgPSBDaG9vc2VSZWFsTl9SZWFsNjQgKEEpDQpzdHJ1 Y3R1cmUgQzE4X1NpemUgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0g d29yZCBlbmQNCmZ1bmN0b3IgQzE4X1NpemVfQ2hvb3NlV29yZE4gKEE6IENI T09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0KDQoo KiBDICopDQpzdHJ1Y3R1cmUgQzE5X0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4 IHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzE5X0NoYXJfQ2hvb3NlSW50 TiAoQTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50OCAoQSkN CnN0cnVjdHVyZSBDMTlfU0NoYXIgPSBzdHJ1Y3Qgb3BlbiBJbnQ4IHR5cGUg dCA9IGludCBlbmQNCmZ1bmN0b3IgQzE5X1NDaGFyX0Nob29zZUludE4gKEE6 IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDggKEEpDQpzdHJ1 Y3R1cmUgQzE5X1VDaGFyID0gc3RydWN0IG9wZW4gV29yZDggdHlwZSB0ID0g d29yZCBlbmQNCmZ1bmN0b3IgQzE5X1VDaGFyX0Nob29zZVdvcmROIChBOiBD SE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ4IChBKQ0Kc3Ry dWN0dXJlIEMxOV9TaG9ydCA9IHN0cnVjdCBvcGVuIEludDE2IHR5cGUgdCA9 IGludCBlbmQNCmZ1bmN0b3IgQzE5X1Nob3J0X0Nob29zZUludE4gKEE6IENI T09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2IChBKQ0Kc3RydWN0 dXJlIEMxOV9TU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJbnQxNiB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEMxOV9TU2hvcnRfQ2hvb3NlSW50TiAoQTogQ0hP T1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MTYgKEEpDQpzdHJ1Y3R1 cmUgQzE5X1VTaG9ydCA9IHN0cnVjdCBvcGVuIFdvcmQxNiB0eXBlIHQgPSB3 b3JkIGVuZA0KZnVuY3RvciBDMTlfVVNob3J0X0Nob29zZVdvcmROIChBOiBD SE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQxNiAoQSkNCnN0 cnVjdHVyZSBDMTlfSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0g aW50IGVuZA0KZnVuY3RvciBDMTlfSW50X0Nob29zZUludE4gKEE6IENIT09T RV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJl IEMxOV9TSW50ID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0ID0gaW50IGVu ZA0KZnVuY3RvciBDMTlfU0ludF9DaG9vc2VJbnROIChBOiBDSE9PU0VfSU5U Tl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVyZSBDMTlf VUludCA9IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0K ZnVuY3RvciBDMTlfVUludF9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkRO X0FSRykgPSBDaG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQpzdHJ1Y3R1cmUgQzE5 X0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBpbnQgZW5kDQpm dW5jdG9yIEMxOV9Mb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FS RykgPSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxOV9TTG9u ZyA9IHN0cnVjdCBvcGVuIEludDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0 b3IgQzE5X1NMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykg PSBDaG9vc2VJbnROX0ludDMyIChBKQ0Kc3RydWN0dXJlIEMxOV9VTG9uZyA9 IHN0cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3Rv ciBDMTlfVUxvbmdfQ2hvb3NlV29yZE4gKEE6IENIT09TRV9XT1JETl9BUkcp ID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0Kc3RydWN0dXJlIEMxOV9Mb25n TG9uZyA9IHN0cnVjdCBvcGVuIEludDY0IHR5cGUgdCA9IGludCBlbmQNCmZ1 bmN0b3IgQzE5X0xvbmdMb25nX0Nob29zZUludE4gKEE6IENIT09TRV9JTlRO X0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChBKQ0Kc3RydWN0dXJlIEMxOV9T TG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBlIHQgPSBpbnQgZW5k DQpmdW5jdG9yIEMxOV9TTG9uZ0xvbmdfQ2hvb3NlSW50TiAoQTogQ0hPT1NF X0lOVE5fQVJHKSA9IENob29zZUludE5fSW50NjQgKEEpDQpzdHJ1Y3R1cmUg QzE5X1VMb25nTG9uZyA9IHN0cnVjdCBvcGVuIFdvcmQ2NCB0eXBlIHQgPSB3 b3JkIGVuZA0KZnVuY3RvciBDMTlfVUxvbmdMb25nX0Nob29zZVdvcmROIChB OiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQ2NCAoQSkN CnN0cnVjdHVyZSBDMTlfRmxvYXQgPSBzdHJ1Y3Qgb3BlbiBSZWFsMzIgdHlw ZSB0ID0gcmVhbCBlbmQNCmZ1bmN0b3IgQzE5X0Zsb2F0X0Nob29zZVJlYWxO IChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENob29zZVJlYWxOX1JlYWwzMiAo QSkNCnN0cnVjdHVyZSBDMTlfRG91YmxlID0gc3RydWN0IG9wZW4gUmVhbDY0 IHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMxOV9Eb3VibGVfQ2hvb3Nl UmVhbE4gKEE6IENIT09TRV9SRUFMTl9BUkcpID0gQ2hvb3NlUmVhbE5fUmVh bDY0IChBKQ0Kc3RydWN0dXJlIEMxOV9TaXplID0gc3RydWN0IG9wZW4gV29y ZDMyIHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMxOV9TaXplX0Nob29z ZVdvcmROIChBOiBDSE9PU0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dv cmQzMiAoQSkNCg0KKCogQyAqKQ0Kc3RydWN0dXJlIEMyMF9DaGFyID0gc3Ry dWN0IG9wZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMyMF9D aGFyX0Nob29zZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJ bnROX0ludDggKEEpDQpzdHJ1Y3R1cmUgQzIwX1NDaGFyID0gc3RydWN0IG9w ZW4gSW50OCB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMyMF9TQ2hhcl9D aG9vc2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9J bnQ4IChBKQ0Kc3RydWN0dXJlIEMyMF9VQ2hhciA9IHN0cnVjdCBvcGVuIFdv cmQ4IHR5cGUgdCA9IHdvcmQgZW5kDQpmdW5jdG9yIEMyMF9VQ2hhcl9DaG9v c2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9X b3JkOCAoQSkNCnN0cnVjdHVyZSBDMjBfU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBJ bnQxNiB0eXBlIHQgPSBpbnQgZW5kDQpmdW5jdG9yIEMyMF9TaG9ydF9DaG9v c2VJbnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQx NiAoQSkNCnN0cnVjdHVyZSBDMjBfU1Nob3J0ID0gc3RydWN0IG9wZW4gSW50 MTYgdHlwZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMjBfU1Nob3J0X0Nob29z ZUludE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDE2 IChBKQ0Kc3RydWN0dXJlIEMyMF9VU2hvcnQgPSBzdHJ1Y3Qgb3BlbiBXb3Jk MTYgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzIwX1VTaG9ydF9DaG9v c2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3JkTl9X b3JkMTYgKEEpDQpzdHJ1Y3R1cmUgQzIwX0ludCA9IHN0cnVjdCBvcGVuIElu dDMyIHR5cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzIwX0ludF9DaG9vc2VJ bnROIChBOiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAo QSkNCnN0cnVjdHVyZSBDMjBfU0ludCA9IHN0cnVjdCBvcGVuIEludDMyIHR5 cGUgdCA9IGludCBlbmQNCmZ1bmN0b3IgQzIwX1NJbnRfQ2hvb3NlSW50TiAo QTogQ0hPT1NFX0lOVE5fQVJHKSA9IENob29zZUludE5fSW50MzIgKEEpDQpz dHJ1Y3R1cmUgQzIwX1VJbnQgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0 ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzIwX1VJbnRfQ2hvb3NlV29yZE4gKEE6 IENIT09TRV9XT1JETl9BUkcpID0gQ2hvb3NlV29yZE5fV29yZDMyIChBKQ0K c3RydWN0dXJlIEMyMF9Mb25nID0gc3RydWN0IG9wZW4gSW50MzIgdHlwZSB0 ID0gaW50IGVuZA0KZnVuY3RvciBDMjBfTG9uZ19DaG9vc2VJbnROIChBOiBD SE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVj dHVyZSBDMjBfU0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQzMiB0eXBlIHQgPSBp bnQgZW5kDQpmdW5jdG9yIEMyMF9TTG9uZ19DaG9vc2VJbnROIChBOiBDSE9P U0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQzMiAoQSkNCnN0cnVjdHVy ZSBDMjBfVUxvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3JkMzIgdHlwZSB0ID0gd29y ZCBlbmQNCmZ1bmN0b3IgQzIwX1VMb25nX0Nob29zZVdvcmROIChBOiBDSE9P U0VfV09SRE5fQVJHKSA9IENob29zZVdvcmROX1dvcmQzMiAoQSkNCnN0cnVj dHVyZSBDMjBfTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBJbnQ2NCB0eXBlIHQg PSBpbnQgZW5kDQpmdW5jdG9yIEMyMF9Mb25nTG9uZ19DaG9vc2VJbnROIChB OiBDSE9PU0VfSU5UTl9BUkcpID0gQ2hvb3NlSW50Tl9JbnQ2NCAoQSkNCnN0 cnVjdHVyZSBDMjBfU0xvbmdMb25nID0gc3RydWN0IG9wZW4gSW50NjQgdHlw ZSB0ID0gaW50IGVuZA0KZnVuY3RvciBDMjBfU0xvbmdMb25nX0Nob29zZUlu dE4gKEE6IENIT09TRV9JTlROX0FSRykgPSBDaG9vc2VJbnROX0ludDY0IChB KQ0Kc3RydWN0dXJlIEMyMF9VTG9uZ0xvbmcgPSBzdHJ1Y3Qgb3BlbiBXb3Jk NjQgdHlwZSB0ID0gd29yZCBlbmQNCmZ1bmN0b3IgQzIwX1VMb25nTG9uZ19D aG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBDaG9vc2VXb3Jk Tl9Xb3JkNjQgKEEpDQpzdHJ1Y3R1cmUgQzIwX0Zsb2F0ID0gc3RydWN0IG9w ZW4gUmVhbDMyIHR5cGUgdCA9IHJlYWwgZW5kDQpmdW5jdG9yIEMyMF9GbG9h dF9DaG9vc2VSZWFsTiAoQTogQ0hPT1NFX1JFQUxOX0FSRykgPSBDaG9vc2VS ZWFsTl9SZWFsMzIgKEEpDQpzdHJ1Y3R1cmUgQzIwX0RvdWJsZSA9IHN0cnVj dCBvcGVuIFJlYWw2NCB0eXBlIHQgPSByZWFsIGVuZA0KZnVuY3RvciBDMjBf RG91YmxlX0Nob29zZVJlYWxOIChBOiBDSE9PU0VfUkVBTE5fQVJHKSA9IENo b29zZVJlYWxOX1JlYWw2NCAoQSkNCnN0cnVjdHVyZSBDMjBfU2l6ZSA9IHN0 cnVjdCBvcGVuIFdvcmQzMiB0eXBlIHQgPSB3b3JkIGVuZA0KZnVuY3RvciBD MjBfU2l6ZV9DaG9vc2VXb3JkTiAoQTogQ0hPT1NFX1dPUkROX0FSRykgPSBD aG9vc2VXb3JkTl9Xb3JkMzIgKEEpDQoNCg== --1417689696-313439160-1139069720=:15050-- From fluet@cs.cornell.edu Sat Feb 4 22:58:34 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Sat, 4 Feb 2006 17:58:34 -0500 (EST) Subject: [MLton] IntInf implementation questions Message-ID: I have a few questions/suggestions for the IntInf implemenation: 1) Why does the fill function in IntInf.c require space for 2 limbs, rather than just space for 1 limb? It seems that we only use one limb. 2) Is there a reason that IntInf_{quot,rem} have such complicated implementations, rather than simply using mpz_tdiv_{q,r}? Those GMP functions appear to have the right semantics. 3) Why does the bigMul function in int-inf.sml make use of an _import-ed multiplication function for small multiplication? Wouldn't it be more efficient to perform the multiplication with Int.* and handle the overflow? Even on the C-codegen, overflow checking primitives are inlined, and with the x86-codegen I see a considerable speed up on an IntInf.int factorial benchmark that is dominated by small multiplications. From MLton@mlton.org Sun Feb 5 00:07:22 2006 From: MLton@mlton.org (Stephen Weeks) Date: Sat, 4 Feb 2006 16:07:22 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: References: Message-ID: <17381.16826.232463.731288@eponym.sweeks.com> > 3) Why does the bigMul function in int-inf.sml make use of an _import-ed > multiplication function for small multiplication? I think this is an artefact of the long-gone days before MLton supported overflow. It seems fine to replace as you suggest. From MLton@mlton.org Sun Feb 5 01:20:41 2006 From: MLton@mlton.org (Stephen Weeks) Date: Sat, 4 Feb 2006 17:20:41 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: <17381.16826.232463.731288@eponym.sweeks.com> References: <17381.16826.232463.731288@eponym.sweeks.com> Message-ID: <17381.21225.65616.365374@eponym.sweeks.com> > I think this is an artefact of the long-gone days before MLton > supported overflow. It seems fine to replace as you suggest. In fact, since the IntInf implementation has not been substantially revised since those days, it probably has a number of similar artefacts that would benefit from rewriting to take advantage of overflow. From MLton@mlton.org Sun Feb 5 01:56:40 2006 From: MLton@mlton.org (Stephen Weeks) Date: Sat, 4 Feb 2006 17:56:40 -0800 Subject: [MLton] Elaborator bug In-Reply-To: References: Message-ID: <17381.23384.491880.866559@eponym.sweeks.com> > The attached source exhibits the following bug: > ElaborateEnv.functorClosure: firstTycons > > I note that the bug is sensitive to the _number_ of structure/functor > bindings made. That was the key observation. I made a simple example, to be evaluated in the _prim environment, that shows the problem. ------------------------------------------------------------ structure S = struct end functor F () = S ... (* 84 F's in total *) functor F () = S ------------------------------------------------------------ As soon as I saw how dependent it was on the number, I began to think "what is so special about 84?". Somehow, my brain managed to guess that that was about the number of primitive type constructors that MLton supports. And in fact, mlton -show-basis reveals that there are exactly 84 primitive tycons. From there, it was easy to see that the functorClosure code was mistakenly removing one element from the allTycons list for each functor definition. I've committed a fix. From henry.cejtin@sbcglobal.net Sun Feb 5 04:19:32 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Sat, 04 Feb 2006 22:19:32 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: Message-ID: Re point 3, certainly the reason is that originally overflow wasn't handled. It was just an error (or ignored). From vesa.karvonen@cs.helsinki.fi Mon Feb 6 01:04:45 2006 From: vesa.karvonen@cs.helsinki.fi (Vesa Karvonen) Date: Mon, 6 Feb 2006 03:04:45 +0200 Subject: [MLton] MLB file tree Message-ID: <1139187885.43e6a0ad98fe7@www2.helsinki.fi> This message is in MIME format. ---MOQ1139187885e2f93701c5dc816d180674dbc4be8769 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Attached is a draft patch for a new option "-stop ft" to print the "MLB file tree". Also attached is the output (compressed with gzip) produced by running mlton -stop ft ~/work/sml/mlton/mlton/mlton/mlton.mlb on my machine. The file tree is useful for analyzing the (dependency) structure of a project. Using standard text processing commands (grep, sed, ...) you can fairly easily extract information from the file tree, such as a list of all MLB files used by a project or the same output as produced by "-stop f". I implemented the option, because I wanted to know which MLB-files are actually used when MLton is compiled, so that I can go through them to better understand how much work it might require to get MLton to compile under MLKit. Known caveats: The "-stop ft" option is only handled properly when the input to the compiler is a MLB-file. -Vesa Karvonen ---MOQ1139187885e2f93701c5dc816d180674dbc4be8769 Content-Type: text/x-patch; name="stop-ft.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="stop-ft.patch" SW5kZXg6IG1sdG9uL21haW4vY29tcGlsZS5mdW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWx0b24vbWFpbi9j b21waWxlLmZ1bgkocmV2aXNpb24gNDM0NykKKysrIG1sdG9uL21haW4vY29tcGlsZS5mdW4JKHdv cmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsOSBAQAogICAgICAgYXN0CiAgICBlbmQKIAorZnVu IGZvckZpbGVUcmVlTUxCICh7aW5wdXR9LCBjYWxsYmFja3MpID0KKyAgIEFzdC5CYXNkZWMuZm9y RmlsZVRyZWUgKGxleEFuZFBhcnNlTUxCIChNTEJTdHJpbmcuZnJvbUZpbGUgaW5wdXQpLCBjYWxs YmFja3MpCisKIGZ1biBzb3VyY2VGaWxlc01MQiB7aW5wdXR9ID0KICAgIEFzdC5CYXNkZWMuc291 cmNlRmlsZXMgKGxleEFuZFBhcnNlTUxCIChNTEJTdHJpbmcuZnJvbUZpbGUgaW5wdXQpKQogCklu ZGV4OiBtbHRvbi9tYWluL2NvbXBpbGUuc2lnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1sdG9uL21haW4vY29t cGlsZS5zaWcJKHJldmlzaW9uIDQzNDcpCisrKyBtbHRvbi9tYWluL2NvbXBpbGUuc2lnCSh3b3Jr aW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb25lOiB1bml0IC0+IHVuaXR9fSAtPiB1bml0CiAgICAgICB2YWwgZWxh Ym9yYXRlTUxCOiB7aW5wdXQ6IEZpbGUudH0gLT4gdW5pdAogICAgICAgdmFsIGVsYWJvcmF0ZVNN TDoge2lucHV0OiBGaWxlLnQgbGlzdH0gLT4gdW5pdAorICAgICAgdmFsIGZvckZpbGVUcmVlTUxC OiB7aW5wdXQ6IEZpbGUudH0gKgorICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRNTEI6 IEZpbGUudCAtPiB7bmVzdDogYm9vbH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5p c2hNTEI6IEZpbGUudCAtPiB1bml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl RmlsZTogRmlsZS50IC0+IHVuaXR9IC0+IHVuaXQKICAgICAgIHZhbCBzZXRDb21tYW5kTGluZUNv bnN0YW50OiB7bmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfSAtPiB1bml0CiAgICAgICB2YWwg c291cmNlRmlsZXNNTEI6IHtpbnB1dDogRmlsZS50fSAtPiBGaWxlLnQgdmVjdG9yCiAgICAgICAo KiBvdXRwdXQgYSBDIGZpbGUgdG8gcHJpbnQgb3V0IHRoZSBiYXNpcyBjb25zdGFudHMuICopCklu ZGV4OiBtbHRvbi9tYWluL21haW4uZnVuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1sdG9uL21haW4vbWFpbi5m dW4JKHJldmlzaW9uIDQzNDcpCisrKyBtbHRvbi9tYWluL21haW4uZnVuCSh3b3JraW5nIGNvcHkp CkBAIC0xNSwxMSArMTUsMTIgQEAKIAogc3RydWN0dXJlIFBsYWNlID0KICAgIHN0cnVjdAotICAg ICAgZGF0YXR5cGUgdCA9IENNIHwgRmlsZXMgfCBHZW5lcmF0ZWQgfCBNTEIgfCBPIHwgT1VUIHwg U01MIHwgVHlwZUNoZWNrCisgICAgICBkYXRhdHlwZSB0ID0gQ00gfCBGaWxlcyB8IEdlbmVyYXRl ZCB8IE1MQiB8IE8gfCBPVVQgfCBTTUwgfCBUcmVlIHwgVHlwZUNoZWNrCiAKICAgICAgIHZhbCB0 b0ludDogdCAtPiBpbnQgPQogICAgICAgICAgZm4gTUxCID0+IDEKICAgICAgICAgICB8IENNID0+ IDEKKyAgICAgICAgICB8IFRyZWUgPT4gMgogICAgICAgICAgIHwgRmlsZXMgPT4gMgogICAgICAg ICAgIHwgU01MID0+IDMKICAgICAgICAgICB8IFR5cGVDaGVjayA9PiA0CkBAIC0yOSw2ICszMCw3 IEBACiAKICAgICAgIHZhbCB0b1N0cmluZyA9CiAgICAgICAgICBmbiBDTSA9PiAiY20iCisgICAg ICAgICAgfCBUcmVlID0+ICJ0cmVlIgogICAgICAgICAgIHwgRmlsZXMgPT4gImZpbGVzIgogICAg ICAgICAgIHwgU01MID0+ICJzbWwiCiAgICAgICAgICAgfCBNTEIgPT4gIm1sYiIKQEAgLTQyNywx MiArNDI5LDEzIEBACiAgICAgICAgICBjYXNlICFDb250cm9sLnNzYTJQYXNzZXNTZXQgKE9wdFBh c3Nlc0N1c3RvbSBzKSBvZgogICAgICAgICAgICAgUmVzdWx0LlllcyAoKSA9PiAoKQogICAgICAg ICAgIHwgUmVzdWx0Lk5vIHMnID0+IHVzYWdlIChjb25jYXQgWyJpbnZhbGlkIC1zc2EyLXBhc3Mg YXJnOiAiLCBzJ10pKSksCi0gICAgICAgKE5vcm1hbCwgInN0b3AiLCAiIHtmfGd8b3xzbWx8dGN9 IiwgIndoZW4gdG8gc3RvcCIsCisgICAgICAgKE5vcm1hbCwgInN0b3AiLCAiIHtmfGZ0fGd8b3xz bWx8dGN9IiwgIndoZW4gdG8gc3RvcCIsCiAgICAgICAgIFNwYWNlU3RyaW5nCiAgICAgICAgIChm biBzID0+CiAgICAgICAgICBzdG9wIDo9IChjYXNlIHMgb2YKICAgICAgICAgICAgICAgICAgICAg ICJmIiA9PiBQbGFjZS5GaWxlcwotICAgICAgICAgICAgICAgICAgIHwgImciID0+IFBsYWNlLkdl bmVyYXRlZCAgICAgCisgICAgICAgICAgICAgICAgICAgfCAiZnQiID0+IFBsYWNlLlRyZWUKKyAg ICAgICAgICAgICAgICAgICB8ICJnIiA9PiBQbGFjZS5HZW5lcmF0ZWQKICAgICAgICAgICAgICAg ICAgICB8ICJvIiA9PiBQbGFjZS5PCiAgICAgICAgICAgICAgICAgICAgfCAic21sIiA9PiBQbGFj ZS5TTUwKICAgICAgICAgICAgICAgICAgICB8ICJ0YyIgPT4gUGxhY2UuVHlwZUNoZWNrCkBAIC05 ODgsNiArOTkxLDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGFjZS5GaWxl cyA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0ZpbGVzCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoQ29tcGlsZS5zb3VyY2VGaWxlc01MQiB7aW5wdXQg PSBmaWxlfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBsYWNlLlRyZWUgPT4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsIHBzaTogRmlsZS50IC0+IGJvb2wgcmVmID0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5tZW1vaXplIChmbiBfID0+IHJlZiBm YWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCBzdGVwID0gMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIGluZGVudCA9IHJlZiAwCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW4gc3BhY2VzIG4gPQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclZlY3Rvci50YWJ1bGF0ZSAobiwg Zm4gXyA9PiAjIiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuIHBy aW50TG4gdGV4dCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dCAoY29uY2F0IFtzcGFjZXMgKCFpbmRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiJdKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnVuIHN0YXJ0TUxCIG5hbWUgPQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2YWwgYiA9IHBzaSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRMbiBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IGluZGVudCA6PSAhaW5kZW50ICsgc3RlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBwcmludExuICJ7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBpbmRlbnQgOj0gIWluZGVudCArIHN0ZXAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsgaWYgIWIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiAocHJpbnRMbiAiW2FscmVhZHkgc2hvd25dIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHtu ZXN0ID0gZmFsc2V9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChi IDo9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsge25lc3QgPSB0cnVlfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuIGZpbmlzaE1MQiBf ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRlbnQgOj0gIWlu ZGVudCAtIHN0ZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHBy aW50TG4gIn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBpbmRl bnQgOj0gIWluZGVudCAtIHN0ZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmdW4gc291cmNlRmlsZSBuYW1lID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50TG4gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGUuZm9yRmlsZVRyZWVN TEIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7aW5wdXQgPSBmaWxlfSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRNTEIgPSBzdGFydE1M QiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoTUxCID0gZmlu aXNoTUxCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxl ID0gc291cmNlRmlsZX0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBsYWNlLlNNTCA9PiBzYXZlU01MIChtYXliZU91 dCAiLnNtbCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQbGFjZS5UeXBlQ2hlY2sg PT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlIChUb3AsICJUeXBlIENo ZWNrIFNNTCIpCkBAIC0xMDAyLDYgKzEwNDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgaW4K ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc3RvcCBvZgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGxhY2UuRmlsZXMgPT4gKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IFBs YWNlLlRyZWUgPT4gKCkKICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBsYWNlLlNNTCA9PiAo KQogICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGxhY2UuVHlwZUNoZWNrID0+ICgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBQbGFjZS5HZW5lcmF0ZWQgPT4gKCkKSW5kZXg6IG1sdG9u L2FzdC9hc3QtbWxicy5zaWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWx0b24vYXN0L2FzdC1tbGJzLnNpZwko cmV2aXNpb24gNDM0NykKKysrIG1sdG9uL2FzdC9hc3QtbWxicy5zaWcJKHdvcmtpbmcgY29weSkK QEAgLTU3LDYgKzU3LDkgQEAKICAgICAgICAgICAgIHZhbCBiYXNpczoge25hbWU6IEJhc2lkLnQs IGRlZjogQmFzZXhwLnR9IHZlY3RvciAtPiB0CiAgICAgICAgICAgICB2YWwgZGVmczogTW9kSWRC aW5kLnQgLT4gdAogICAgICAgICAgICAgdmFsIGVtcHR5OiB0CisgICAgICAgICAgICB2YWwgZm9y RmlsZVRyZWU6IHQgKiB7c3RhcnRNTEI6IEZpbGUudCAtPiB7bmVzdDogYm9vbH0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoTUxCOiBGaWxlLnQgLT4gdW5pdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlOiBGaWxlLnQgLT4gdW5p dH0gLT4gdW5pdAogICAgICAgICAgICAgdmFsIGxvY2FsbDogdCAqIHQgLT4gdAogICAgICAgICAg ICAgdmFsIG1sYjoge2ZpbGVBYnM6IEZpbGUudCwgZmlsZVVzZTogRmlsZS50fSAqIHQgUHJvbWlz ZS50IC0+IHQKICAgICAgICAgICAgIHZhbCBvcGVubjogQmFzaWQudCB2ZWN0b3IgLT4gdApJbmRl eDogbWx0b24vYXN0L2FzdC1tbGJzLmZ1bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtbHRvbi9hc3QvYXN0LW1s YnMuZnVuCShyZXZpc2lvbiA0MzQ3KQorKysgbWx0b24vYXN0L2FzdC1tbGJzLmZ1bgkod29ya2lu ZyBjb3B5KQpAQCAtMTMsNyArMTMsNyBAQAogCiBzdHJ1Y3R1cmUgQXN0UHJvZ3JhbXMgPSBBc3RQ cm9ncmFtcyAoUykKIAotb3BlbiBBc3RQcm9ncmFtcyBMYXlvdXQKK29wZW4gQXN0UHJvZ3JhbXMK ICAgIAogdmFsIGxheW91dHMgPSBMaXN0Lm1hcAogc3RydWN0dXJlIFdyYXAgPSBSZWdpb24uV3Jh cApAQCAtNDAsMzQgKzQwLDM4IEBACiB3aXRodHlwZSBiYXNleHAgPSBiYXNleHBOb2RlIFdyYXAu dAogICAgICBhbmQgYmFzZGVjID0gYmFzZGVjTm9kZSBXcmFwLnQKIAotZnVuIGxheW91dEJhc2V4 cCBleHAgPQotICAgY2FzZSBub2RlIGV4cCBvZgotICAgICAgQmFzIGRlYyA9PiBhbGlnbiBbc3Ry ICJiYXMiLCBpbmRlbnQgKGxheW91dEJhc2RlYyBkZWMsIDMpLCBzdHIgImVuZCJdCi0gICAgfCBM ZXQgKGRlYywgZXhwKSA9PiBQcmV0dHkubGV0dCAobGF5b3V0QmFzZGVjIGRlYywgbGF5b3V0QmFz ZXhwIGV4cCkKLSAgICB8IFZhciBiYXNpZCA9PiBCYXNpZC5sYXlvdXQgYmFzaWQgCi1hbmQgbGF5 b3V0QmFzZGVjIGRlYyA9Ci0gICBjYXNlIG5vZGUgZGVjIG9mCi0gICAgICBBbm4gKGFubnMsXywg ZGVjKSA9PgotICAgICAgICAgYWxpZ24gW3N0ciAiYW5uIiwgCi0gICAgICAgICAgICAgICAgaW5k ZW50IChzZXEgW3N0ciBTdHJpbmcuZHF1b3RlLCBzdHIgYW5ucywgc3RyIFN0cmluZy5kcXVvdGVd LCAzKSwKLSAgICAgICAgICAgICAgICBzdHIgImluIiwgCi0gICAgICAgICAgICAgICAgaW5kZW50 IChsYXlvdXRCYXNkZWMgZGVjLCAzKSwgCi0gICAgICAgICAgICAgICAgc3RyICJlbmQiXQotICAg IHwgQmFzaXMgYmFzYm5kcyA9PgotICAgICAgICAgbGF5b3V0QW5kc0JpbmQKLSAgICAgICAgICgi YmFzaXMiLCAiPSIsIGJhc2JuZHMsIGZuIHtuYW1lLCBkZWZ9ID0+Ci0gICAgICAgICAgKGNhc2Ug bm9kZSBkZWYgb2YgVmFyIF8gPT4gT25lTGluZSB8IF8gPT4gU3BsaXQgMywKLSAgICAgICAgICAg QmFzaWQubGF5b3V0IG5hbWUsIGxheW91dEJhc2V4cCBkZWYpKQotICAgIHwgRGVmcyBkZWYgPT4g TW9kSWRCaW5kLmxheW91dCBkZWYKLSAgICB8IExvY2FsIChkZWMxLCBkZWMyKSA9PiBQcmV0dHku bG9jYWxsIChsYXlvdXRCYXNkZWMgZGVjMSwgbGF5b3V0QmFzZGVjIGRlYzIpIAotICAgIHwgTUxC ICh7ZmlsZVVzZSwgLi4ufSwgXykgPT4gRmlsZS5sYXlvdXQgZmlsZVVzZQotICAgIHwgT3BlbiBi cyA9PiBzZXEgW3N0ciAib3BlbiAiLAotICAgICAgICAgICAgICAgICAgICAgIHNlcSAoc2VwYXJh dGUgKFZlY3Rvci50b0xpc3RNYXAgKGJzLCBCYXNpZC5sYXlvdXQpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgIikpXSAKLSAgICB8IFByaW0gPT4gc3RyICJfcHJpbSIK LSAgICB8IFByb2cgKHtmaWxlVXNlLCAuLi59LCBfKSA9PiBGaWxlLmxheW91dCBmaWxlVXNlCi0g ICAgfCBTZXEgZGVjcyA9PiBhbGlnbiAobGF5b3V0QmFzZGVjcyBkZWNzKQotYW5kIGxheW91dEJh c2RlY3MgZGVjcyA9IGxheW91dHMgKGRlY3MsIGxheW91dEJhc2RlYykKK2xvY2FsCisgICBvcGVu IExheW91dAoraW4KKyAgIGZ1biBsYXlvdXRCYXNleHAgZXhwID0KKyAgICAgIGNhc2Ugbm9kZSBl eHAgb2YKKyAgICAgICAgIEJhcyBkZWMgPT4gYWxpZ24gW3N0ciAiYmFzIiwgaW5kZW50IChsYXlv dXRCYXNkZWMgZGVjLCAzKSwgc3RyICJlbmQiXQorICAgICAgIHwgTGV0IChkZWMsIGV4cCkgPT4g UHJldHR5LmxldHQgKGxheW91dEJhc2RlYyBkZWMsIGxheW91dEJhc2V4cCBleHApCisgICAgICAg fCBWYXIgYmFzaWQgPT4gQmFzaWQubGF5b3V0IGJhc2lkIAorICAgYW5kIGxheW91dEJhc2RlYyBk ZWMgPQorICAgICAgY2FzZSBub2RlIGRlYyBvZgorICAgICAgICAgQW5uIChhbm5zLF8sIGRlYykg PT4KKyAgICAgICAgICAgIGFsaWduIFtzdHIgImFubiIsIAorICAgICAgICAgICAgICAgICAgIGlu ZGVudCAoc2VxIFtzdHIgU3RyaW5nLmRxdW90ZSwgc3RyIGFubnMsIHN0ciBTdHJpbmcuZHF1b3Rl XSwgMyksCisgICAgICAgICAgICAgICAgICAgc3RyICJpbiIsIAorICAgICAgICAgICAgICAgICAg IGluZGVudCAobGF5b3V0QmFzZGVjIGRlYywgMyksIAorICAgICAgICAgICAgICAgICAgIHN0ciAi ZW5kIl0KKyAgICAgICB8IEJhc2lzIGJhc2JuZHMgPT4KKyAgICAgICAgICAgIGxheW91dEFuZHNC aW5kCisgICAgICAgICAgICAoImJhc2lzIiwgIj0iLCBiYXNibmRzLCBmbiB7bmFtZSwgZGVmfSA9 PgorICAgICAgICAgICAgIChjYXNlIG5vZGUgZGVmIG9mIFZhciBfID0+IE9uZUxpbmUgfCBfID0+ IFNwbGl0IDMsCisgICAgICAgICAgICAgIEJhc2lkLmxheW91dCBuYW1lLCBsYXlvdXRCYXNleHAg ZGVmKSkKKyAgICAgICB8IERlZnMgZGVmID0+IE1vZElkQmluZC5sYXlvdXQgZGVmCisgICAgICAg fCBMb2NhbCAoZGVjMSwgZGVjMikgPT4gUHJldHR5LmxvY2FsbCAobGF5b3V0QmFzZGVjIGRlYzEs IGxheW91dEJhc2RlYyBkZWMyKSAKKyAgICAgICB8IE1MQiAoe2ZpbGVVc2UsIC4uLn0sIF8pID0+ IEZpbGUubGF5b3V0IGZpbGVVc2UKKyAgICAgICB8IE9wZW4gYnMgPT4gc2VxIFtzdHIgIm9wZW4g IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXEgKHNlcGFyYXRlIChWZWN0b3IudG9MaXN0 TWFwIChicywgQmFzaWQubGF5b3V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiICIpKV0gCisgICAgICAgfCBQcmltID0+IHN0ciAiX3ByaW0iCisgICAgICAgfCBQ cm9nICh7ZmlsZVVzZSwgLi4ufSwgXykgPT4gRmlsZS5sYXlvdXQgZmlsZVVzZQorICAgICAgIHwg U2VxIGRlY3MgPT4gYWxpZ24gKGxheW91dEJhc2RlY3MgZGVjcykKKyAgIGFuZCBsYXlvdXRCYXNk ZWNzIGRlY3MgPSBsYXlvdXRzIChkZWNzLCBsYXlvdXRCYXNkZWMpCitlbmQKIAogZnVuIGNoZWNr U3ludGF4QmFzZXhwIChlOiBiYXNleHApOiB1bml0ID0KICAgIGNhc2Ugbm9kZSBlIG9mCkBAIC05 Niw0OSArMTAwLDYzIEBACiAgICAgfCBQcm9nIF8gPT4gKCkKICAgICB8IFNlcSBkZWNzID0+IExp c3QuZm9yZWFjaCAoZGVjcywgY2hlY2tTeW50YXhCYXNkZWMpCiAKLWZ1biBzb3VyY2VGaWxlcyAo ZDogYmFzZGVjKTogRmlsZS50IHZlY3RvciA9CitmdW4gZm9yRmlsZVRyZWUgKGQsIHtzdGFydE1M QiwgZmluaXNoTUxCLCBzb3VyY2VGaWxlfSkgPQogICAgbGV0Ci0gICAgICB2YWwgc291cmNlRmls ZXMgOiBGaWxlLnQgQnVmZmVyLnQgPQotICAgICAgICAgQnVmZmVyLm5ldyB7ZHVtbXkgPSAiPGR1 bW15PiJ9Ci0gICAgICB2YWwgcHNpIDogRmlsZS50IC0+IGJvb2wgcmVmID0KLSAgICAgICAgIFN0 cmluZy5tZW1vaXplIChmbiBfID0+IHJlZiBmYWxzZSkKLQotICAgICAgZnVuIHNvdXJjZUZpbGVz QmFzZXhwIChlOiBiYXNleHApOiB1bml0ID0KKyAgICAgIGZ1biByZWNCYXNleHAgZSA9CiAgICAg ICAgICBjYXNlIG5vZGUgZSBvZgotICAgICAgICAgICAgQmFzIGRlYyA9PiBzb3VyY2VGaWxlc0Jh c2RlYyBkZWMKLSAgICAgICAgICB8IExldCAoZGVjLCBleHApID0+IChzb3VyY2VGaWxlc0Jhc2Rl YyBkZWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHNvdXJjZUZpbGVzQmFzZXhw IGV4cCkKKyAgICAgICAgICAgIEJhcyBkZWMgPT4gcmVjQmFzZGVjIGRlYworICAgICAgICAgIHwg TGV0IChkZWMsIGV4cCkgPT4gKHJlY0Jhc2RlYyBkZWMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IHJlY0Jhc2V4cCBleHApCiAgICAgICAgICAgfCBWYXIgXyA9PiAoKQotICAgICAg YW5kIHNvdXJjZUZpbGVzQmFzZGVjIChkOiBiYXNkZWMpOiB1bml0ID0KKyAgICAgIGFuZCByZWNC YXNkZWMgZCA9CiAgICAgICAgICBjYXNlIG5vZGUgZCBvZgotICAgICAgICAgICAgQW5uIChfLCBf LCBkZWMpID0+IHNvdXJjZUZpbGVzQmFzZGVjIGRlYworICAgICAgICAgICAgQW5uIChfLCBfLCBk ZWMpID0+IHJlY0Jhc2RlYyBkZWMKICAgICAgICAgICB8IEJhc2lzIGJhc2JuZHMgPT4KICAgICAg ICAgICAgICAgIFZlY3Rvci5mb3JlYWNoCiAgICAgICAgICAgICAgICAoYmFzYm5kcywgZm4ge2Rl ZiwgLi4ufSA9PgotICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVzQmFzZXhwIGRlZikKKyAgICAg ICAgICAgICAgICByZWNCYXNleHAgZGVmKQogICAgICAgICAgIHwgRGVmcyBfID0+ICgpCi0gICAg ICAgICAgfCBMb2NhbCAoZGVjMSwgZGVjMikgPT4gKHNvdXJjZUZpbGVzQmFzZGVjIGRlYzEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBzb3VyY2VGaWxlc0Jhc2RlYyBkZWMy KQorICAgICAgICAgIHwgTG9jYWwgKGRlYzEsIGRlYzIpID0+IChyZWNCYXNkZWMgZGVjMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlY0Jhc2RlYyBkZWMyKQogICAgICAg ICAgIHwgTUxCICh7ZmlsZUFicywgLi4ufSwgZGVjKSA9PgotICAgICAgICAgICAgICAgbGV0Ci0g ICAgICAgICAgICAgICAgICB2YWwgYiA9IHBzaSBmaWxlQWJzCi0gICAgICAgICAgICAgICBpbgot ICAgICAgICAgICAgICAgICAgaWYgIWIKLSAgICAgICAgICAgICAgICAgICAgIHRoZW4gKCkKLSAg ICAgICAgICAgICAgICAgICAgIGVsc2UgbGV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbCAoKSA9IGIgOj0gdHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICBpbgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlc0Jhc2RlYyAoUHJvbWlzZS5mb3JjZSBk ZWMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgZW5kCisg ICAgICAgICAgICAoaWYge25lc3QgPSB0cnVlfSA9IHN0YXJ0TUxCIGZpbGVBYnMKKyAgICAgICAg ICAgICAgICB0aGVuIHJlY0Jhc2RlYyAoUHJvbWlzZS5mb3JjZSBkZWMpCisgICAgICAgICAgICAg ZWxzZSAoKQorICAgICAgICAgICAgIDsgZmluaXNoTUxCIGZpbGVBYnMpCiAgICAgICAgICAgfCBP cGVuIF8gPT4gKCkKICAgICAgICAgICB8IFByaW0gPT4gKCkKLSAgICAgICAgICB8IFByb2cgKHtm aWxlVXNlLCAuLi59LCBfKSA9PiBCdWZmZXIuYWRkIChzb3VyY2VGaWxlcywgZmlsZVVzZSkKLSAg ICAgICAgICB8IFNlcSBkZWNzID0+IExpc3QuZm9yZWFjaCAoZGVjcywgc291cmNlRmlsZXNCYXNk ZWMpCi0gICAgICB2YWwgKCkgPSBzb3VyY2VGaWxlc0Jhc2RlYyBkCisgICAgICAgICAgfCBQcm9n ICh7ZmlsZVVzZSwgLi4ufSwgXykgPT4gc291cmNlRmlsZSBmaWxlVXNlCisgICAgICAgICAgfCBT ZXEgZGVjcyA9PiBMaXN0LmZvcmVhY2ggKGRlY3MsIHJlY0Jhc2RlYykKICAgIGluCi0gICAgICBC dWZmZXIudG9WZWN0b3Igc291cmNlRmlsZXMKKyAgICAgIHJlY0Jhc2RlYyBkCiAgICBlbmQKKwor ZnVuIHNvdXJjZUZpbGVzIChkOiBiYXNkZWMpOiBGaWxlLnQgdmVjdG9yID0KKyAgIGxldAorICAg ICAgdmFsIHNvdXJjZUZpbGVzIDogRmlsZS50IEJ1ZmZlci50ID0KKyAgICAgICAgIEJ1ZmZlci5u ZXcge2R1bW15ID0gIjxkdW1teT4ifQorICAgICAgdmFsIHBzaSA6IEZpbGUudCAtPiBib29sIHJl ZiA9CisgICAgICAgICBTdHJpbmcubWVtb2l6ZSAoZm4gXyA9PiByZWYgZmFsc2UpCisKKyAgICAg IGZ1biBzdGFydE1MQiBmaWxlQWJzID0KKyAgICAgICAgIGxldAorICAgICAgICAgICAgdmFsIGIg PSBwc2kgZmlsZUFicworICAgICAgICAgaW4KKyAgICAgICAgICAgIGlmICFiCisgICAgICAgICAg ICAgICB0aGVuIHtuZXN0ID0gZmFsc2V9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAoYiA6PSB0cnVlCisgICAgICAgICAgICAgICAgOyB7bmVzdCA9IHRydWV9KQorICAgICAgICAg ZW5kCisKKyAgICAgIGZ1biBzb3VyY2VGaWxlIGZpbGVVc2UgPQorICAgICAgICAgQnVmZmVyLmFk ZCAoc291cmNlRmlsZXMsIGZpbGVVc2UpCisgICBpbgorICAgICAgZm9yRmlsZVRyZWUgKGQsIHtz dGFydE1MQiA9IHN0YXJ0TUxCLAorICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hNTEIgPSBp Z25vcmUsCisgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSBzb3VyY2VGaWxlfSkK KyAgICAgIDsgQnVmZmVyLnRvVmVjdG9yIHNvdXJjZUZpbGVzCisgICBlbmQKIHZhbCBzb3VyY2VG aWxlcyA9CiAgICBUcmFjZS50cmFjZSAKICAgICgiQXN0TUxCcy5zb3VyY2VGaWxlcyIsIExheW91 dC5pZ25vcmUsIFZlY3Rvci5sYXlvdXQgRmlsZS5sYXlvdXQpCkBAIC0xODMsNiArMjAxLDcgQEAK ICAgICAgIHZhbCBwcm9nID0gbWFrZSBvIFByb2cKICAgICAgIHZhbCBjaGVja1N5bnRheCA9IGNo ZWNrU3ludGF4QmFzZGVjCiAgICAgICB2YWwgbGF5b3V0ID0gbGF5b3V0QmFzZGVjCisgICAgICB2 YWwgZm9yRmlsZVRyZWUgPSBmb3JGaWxlVHJlZQogICAgICAgdmFsIHNvdXJjZUZpbGVzID0gc291 cmNlRmlsZXMKICAgIGVuZAogZW5kCg== ---MOQ1139187885e2f93701c5dc816d180674dbc4be8769 Content-Type: application/gzip; name="stop-ft-example.txt.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="stop-ft-example.txt.gz" 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 ---MOQ1139187885e2f93701c5dc816d180674dbc4be8769-- From wesley@terpstra.ca Mon Feb 6 15:48:23 2006 From: wesley@terpstra.ca (Wesley W. Terpstra) Date: Mon, 6 Feb 2006 16:48:23 +0100 Subject: [MLton] Paging friendly GC? Message-ID: <50258B57-DDD8-4784-9FB7-370DAD5F24C8@terpstra.ca> Obviously, I'm no garbage collector expert. However, I seem to recall that MLton uses a 'generational mark-sweep' algorithm...? I know that MLton performs very poorly once the heap size exceeds physical memory. The system thrashes to death. So, when I saw this, I thought maybe those of you with a clue might care: http://www.cs.umass.edu/~emery/pubs/f034-hertz.pdf Is this relevant / useful for MLton? Could something like this make a self-compile feasible with < 512MB RAM? From fluet@cs.cornell.edu Mon Feb 6 19:07:59 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Mon, 6 Feb 2006 14:07:59 -0500 (EST) Subject: [MLton] IntInf implementation questions In-Reply-To: <17381.21225.65616.365374@eponym.sweeks.com> References: <17381.16826.232463.731288@eponym.sweeks.com> <17381.21225.65616.365374@eponym.sweeks.com> Message-ID: >> I think this is an artefact of the long-gone days before MLton >> supported overflow. It seems fine to replace as you suggest. > > In fact, since the IntInf implementation has not been substantially > revised since those days, it probably has a number of similar > artefacts that would benefit from rewriting to take advantage of > overflow. I don't see any others. Given two IntInf integers represented as small integers (say, 32 bits == 31 bits data + 1 bit tag), then the small integer + and - (say, Int32.+ and Int32.-) can't overflow, although the resulting value may not be expressible as a small integer with a tag bit. Of course, we could use overflow checking if we don't completely convert the small integer into it's 32 bit representation. That is, consider bigPlus: (* Coercion to/from 32-bit representation. *) fun stripTag (arg: bigInt): Word.word = Word.~>> (Prim.toWord arg, 0w1) fun addTag (argw: Word.word): Word.word = Word.orb (Word.<< (argw, 0w1), 0w1) fun zeroTag (arg: bigInt): Word.word = Word.andb (Prim.toWord arg, 0wxFFFFFFFE) fun incTag (argw: Word.word): Word.word = Word.orb (argw, 0w1) (* Check if two words have the same sign bit. *) fun sameSign (lhs: Word.word, rhs: Word.word): bool = Word.toIntX (Word.xorb (lhs, rhs)) >= 0 fun bigPlus (lhs: bigInt, rhs: bigInt): bigInt = let val res = if areSmall (lhs, rhs) then let val ansv = Word.+ (stripTag lhs, stripTag rhs) val ans = addTag ansv in if sameSign (ans, ansv) then SOME (Prim.fromWord ans) else NONE end else NONE in case res of NONE => dontInline (fn () => Prim.+ (lhs, rhs, reserve (Int.max (size lhs, size rhs), 1))) | SOME i => i end On the small fast path, I count 6 bitops and one comparison test. (Note that Word.{fromInt,toIntX} are the identity functions.) I think the following is equivalent: fun bigPlus (lhs: bigInt, rhs: bigInt): bigInt = let val res = if areSmall (lhs, rhs) then let val ansv = Int.+ (Word.toIntX (Prim.toWord lhs), Word.toIntX (zeroTag rhs)) in SOME (Prim.fromWord (Word.fromInt ansv)) end handle Overflow => NONE else NONE in case res of NONE => dontInline (fn () => Prim.+ (lhs, rhs, reserve (Int.max (size lhs, size rhs), 1))) | SOME i => i end On the small fast path, I count 2 bitops and one overflow test. I think you can do the same thing for bigMinus. From henry.cejtin@sbcglobal.net Mon Feb 6 19:33:17 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Mon, 06 Feb 2006 13:33:17 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: Message-ID: Re IntInf multiply, as I recall, the time it takes for a 32*32->64 multiply is the same as for a 32*32->32 multiply on the x86, so if it could be done inline (no call to a C routine), it might still be faster to do the big digit multiply and then check for the right kind of overflow. Probably not a big win unless you are frequently multiplying smalls with a product that doesn't fit. Re dontInline, is this exported to any thing any where? There are definitely times when it would be a useful hack for speed. The particular case I know where I did something like this by `hand' was in a kind of TextIO version where I did not want the buffer under/over-flow case to be inlined because then it would inline all the input1 calls. From MLton@mlton.org Mon Feb 6 21:58:37 2006 From: MLton@mlton.org (Stephen Weeks) Date: Mon, 6 Feb 2006 13:58:37 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: References: <17381.16826.232463.731288@eponym.sweeks.com> <17381.21225.65616.365374@eponym.sweeks.com> Message-ID: <17383.50829.134663.320998@eponym.sweeks.com> > fun bigPlus (lhs: bigInt, rhs: bigInt): bigInt = > let > val res = > if areSmall (lhs, rhs) > then let val ansv = Word.+ (stripTag lhs, stripTag rhs) > val ans = addTag ansv > in if sameSign (ans, ansv) > then SOME (Prim.fromWord ans) > else NONE > end > else NONE ... > On the small fast path, I count 6 bitops and one comparison test. Yep. I'd say that makes sense to count areSmall as being on the path too, so you get 8 bitops and two tests. func bitops tests -------- ---------- ----- areSmall andb, andb <> stripTag ~>> stripTag ~>> Word.+ + addTag <<, orb sameSign xorb >= > I think the following is equivalent: > > fun bigPlus (lhs: bigInt, rhs: bigInt): bigInt = > let > val res = > if areSmall (lhs, rhs) > then let val ansv = Int.+ (Word.toIntX (Prim.toWord lhs), > Word.toIntX (zeroTag rhs)) > in SOME (Prim.fromWord (Word.fromInt ansv)) > end handle Overflow => NONE > else NONE ... > On the small fast path, I count 2 bitops and one overflow test. I think > you can do the same thing for bigMinus. Yes, this is a good trick. Again, counting areSmall, this gives 4 bitops, one test, and one overflow check. So we can hope for maybe even a factor of two speedup. Nice. BTW, this trick is pretty well known. It is what SML/NJ does (at least did) and is described on page 162 of Appel's book, Compiling With Continuations (http://mlton.org/References#Appel92). Appel also explains there how to do multiplication, and points out that one can do subtraction and division too. I think the same tricks work in our situation. Another nice observation that Appel makes is that if one of the arguments is constant, the zeroTag can be done at compile time. Unfortunately, since this is user code, we have to get lucky and hope that rhs is the constant. Hmmm, I wonder if we could add a primitive: val isConstant: 'a -> bool The semantics of isConstant is that it returns false, unless the optimizer is able to prove that its argument is a constant. Obviously, one can only use isConstant sensibly in symmetric situations where the behavior of the program (other than performance) doesn't depend on whether it returns true or false. For example, we could then write something like: if areSmall (lhs, rhs) then let val (x, c) = if isConstant lhs then (rhs, lhs) else (lhs, rhs) in SOME (Prim.fromWord (Word.fromInt (Int.+ (Word.toIntX (Prim.toWord x), Word.toIntX (zeroTag c))))) handle Overflow => NONE end else NONE Now, if either lhs or rhs is constant, the zeroTag will happen at compile time and we will save one (of four) bitops. That seems worth it. From MLton@mlton.org Mon Feb 6 22:12:08 2006 From: MLton@mlton.org (Stephen Weeks) Date: Mon, 6 Feb 2006 14:12:08 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: References: Message-ID: <17383.51640.757282.146887@eponym.sweeks.com> > Re IntInf multiply, as I recall, the time it takes for a 32*32->64 > multiply is the same as for a 32*32->32 multiply on the x86, so if > it could be done inline (no call to a C routine), it might still be > faster to do the big digit multiply and then check for the right > kind of overflow. Probably not a big win unless you are frequently > multiplying smalls with a product that doesn't fit. We don't have the primitive support to do the smallMul inline, so I guess that the right thing is to do the trick Appel mentions, which is fast when multiplying 2 smalls to get a small. For completeness, here is the trick. If i' = 2i + 1 j' = 2j + 1 then (i' - 1) * floor(j' / 2) + 1 = 2 (ij) + 1 So, one can multiply two smalls using 4 bitops: zero tag (or sub1), shift (/2), mul, and add 1. And as with plus, the zero tag can be simplified at compile time if one argument is a constant. Counting areSmall and the overflow check, that gives 6 bitops, one test, and one overflow check. That should be a big win over our current approach. > Re dontInline, is this exported to any thing any where? mlton -show-basis shows that it is not. However, it is a small piece of code and doesn't rely on any privileged primitives, so you can easily put it in your own code. val dontInline: (unit -> 'a) -> 'a = fn f => let val rec recur: int -> 'a = fn i => if i = 0 then f () else (ignore (recur (i - 1)) ; recur (i - 2)) in recur 0 end From henry.cejtin@sbcglobal.net Mon Feb 6 22:33:07 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Mon, 06 Feb 2006 16:33:07 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: <17383.51640.757282.146887@eponym.sweeks.com> Message-ID: Re dontInLine, it may not use any primitives, but it certainly relies on a lot of things about MLton (that recursive functions aren't unrolled, that the simplitier will get rid of the junk, etc.). Any way, I quite agree that the hack for small*small->small should be quite a win. It really is a shame (for IntInf any way) that the tag for non-pointers isn't 0, but 1. Especially for + and -. From wesley@terpstra.ca Mon Feb 6 22:37:15 2006 From: wesley@terpstra.ca (Wesley W. Terpstra) Date: Mon, 6 Feb 2006 23:37:15 +0100 Subject: [MLton] IntInf implementation questions In-Reply-To: <17383.51640.757282.146887@eponym.sweeks.com> References: <17383.51640.757282.146887@eponym.sweeks.com> Message-ID: On Feb 6, 2006, at 11:12 PM, Stephen Weeks wrote: >> Re IntInf multiply, as I recall, the time it takes for a 32*32->64 >> multiply is the same as for a 32*32->32 multiply on the x86 > > We don't have the primitive support to do the smallMul inline Do I need to beg? :-) From henry.cejtin@sbcglobal.net Mon Feb 6 22:17:33 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Mon, 06 Feb 2006 16:17:33 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: <17383.47755.508746.209651@eponym.sweeks.com> Message-ID: As to why fill() in IntInf.c requires at least 2 limbs, my guess looking at my old code is that it was (is?) to make sure that you can always fit any 32-bit int in it. I remember one had to be a bit cautious because of things that were small but whose negation were not. Sadly, I don't really remember what the reason for the restriction was. Re quot and rem, I remember trying to use the mpn stuff (instead of the mpz things) when ever possible because they didn't do as many internal allocations. If you look at atleast the old (GMP 2.0.2) source for mpz_tdiv_[qr], they do pretty much the same as IntInf_quot/rem do, and they have all kinds of conditions under which they allocate. You have to be sure that these routines do NOT allocate, or else you will end up with things pointing in the malloc heap instead of the MLton one. From MLton@mlton.org Mon Feb 6 22:41:15 2006 From: MLton@mlton.org (Stephen Weeks) Date: Mon, 6 Feb 2006 14:41:15 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: References: <17383.51640.757282.146887@eponym.sweeks.com> Message-ID: <17383.53387.318011.256951@eponym.sweeks.com> > Re dontInLine, it may not use any primitives, but it certainly > relies on a lot of things about MLton (that recursive functions > aren't unrolled, that the simplitier will get rid of the junk, > etc.). True. That is a good argument for putting it in the (or some) basis, since it may change occasionally. From henry.cejtin@sbcglobal.net Mon Feb 6 22:45:51 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Mon, 06 Feb 2006 16:45:51 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: Message-ID: Do you really have code where 32*32->64 would be a big win compared to the Appel hack which would avoid the expensive call to C? It can only be a win if you have things that fit in 31 bits and are frequently multiplying them together and the product often does NOT fit in 31 bits. Obviously one can construct bad cases, but I would think that it would be VERY rare in practice. From wesley@terpstra.ca Mon Feb 6 23:27:00 2006 From: wesley@terpstra.ca (Wesley W. Terpstra) Date: Tue, 7 Feb 2006 00:27:00 +0100 Subject: [MLton] IntInf implementation questions In-Reply-To: References: Message-ID: <6B8C581D-B223-48D5-BD72-C16707673569@terpstra.ca> On Feb 6, 2006, at 11:45 PM, Henry Cejtin wrote: > Do you really have code where 32*32->64 would be a big win compared > to the > Appel hack which would avoid the expensive call to C? It can only > be a win > if you have things that fit in 31 bits and are frequently > multiplying them > together and the product often does NOT fit in 31 bits. Obviously > one can > construct bad cases, but I would think that it would be VERY rare > in practice. Might you be asking for a link to my very first post on this list? I think you might be! ;-) http://terpstra.ca/lurker/message/20041021.222851.4139646f.en.html Admittedly, in my case I wanted to store the thing in a Word32. However, since it is modulo 2^31-1, I could have stored it in an 'int'. Of course, I don't really expect normal int*int multiplication to do this. I just heard Stephen say 'primitive' near the words 32*32->64 mul, and my heart jumped into my throat. ;-) There is still no way to get MLton to output the pretty 'MUL:' assembler that I detailed in my post. I've been hoping for some time. From henry.cejtin@sbcglobal.net Mon Feb 6 23:43:00 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Mon, 06 Feb 2006 17:43:00 -0600 Subject: [MLton] IntInf implementation questions In-Reply-To: <6B8C581D-B223-48D5-BD72-C16707673569@terpstra.ca> Message-ID: I remember your code (I think), but I gather from your mail that it isn't really a matter of a faster IntInf.* (which I think the Appel hack will do), but to expose some kind of Int32.int * Int32.int -> Int64.int which turns into the instruction. (I agree, if you need this it is a big win.) From MLton@mlton.org Tue Feb 7 00:18:41 2006 From: MLton@mlton.org (Stephen Weeks) Date: Mon, 6 Feb 2006 16:18:41 -0800 Subject: [MLton] IntInf implementation questions In-Reply-To: <6B8C581D-B223-48D5-BD72-C16707673569@terpstra.ca> References: <6B8C581D-B223-48D5-BD72-C16707673569@terpstra.ca> Message-ID: <17383.59233.105857.565406@eponym.sweeks.com> > Of course, I don't really expect normal int*int multiplication to do > this. > I just heard Stephen say 'primitive' near the words 32*32->64 mul, > and my heart jumped into my throat. ;-) > > There is still no way to get MLton to output the pretty 'MUL:' assembler > that I detailed in my post. I've been hoping for some time. It still seems to me like it shouldn't be that hard for someone to add (mind you, I don't have the time). Wesley, you're clearly the one to do it since you have the need, and now you have more than a year's experience subscribed to the list, so you know you will get help if you need it. I can state with certainty that there is no problem defining such a primitive, exposing it in the basis, treating it correctly in the optimizer, and pushing it through all the ILs to the codegen. Matthew can comment on how easy it would be to tell the x86 codegen about it. If that's not problematic, why not spend a day a put it in? From fluet@cs.cornell.edu Tue Feb 7 02:58:38 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Mon, 6 Feb 2006 21:58:38 -0500 (EST) Subject: [MLton] IntInf implementation questions In-Reply-To: References: Message-ID: > As to why fill() in IntInf.c requires at least 2 limbs, my guess looking at > my old code is that it was (is?) to make sure that you can always fit any > 32-bit int in it. I remember one had to be a bit cautious because of things > that were small but whose negation were not. O.k. > Re quot and rem, I remember trying to use the mpn stuff (instead of the mpz > things) when ever possible because they didn't do as many internal > allocations. If you look at atleast the old (GMP 2.0.2) source for > mpz_tdiv_[qr], they do pretty much the same as IntInf_quot/rem do, and they > have all kinds of conditions under which they allocate. You have to be sure > that these routines do NOT allocate, or else you will end up with things > pointing in the malloc heap instead of the MLton one. That's a good reason. I guess I'll try browsing the GMP source a little. I don't think it is that bad if GMP does some internal mallocs/frees, but certainly we want the final answer to go in the buffer we've allocated. I've not seen any problems using the mpz_tdiv_{q,r}, but I haven't really stress tested it. From fluet@cs.cornell.edu Tue Feb 7 03:02:17 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Mon, 6 Feb 2006 22:02:17 -0500 (EST) Subject: [MLton] IntInf implementation questions In-Reply-To: <17383.59233.105857.565406@eponym.sweeks.com> References: <6B8C581D-B223-48D5-BD72-C16707673569@terpstra.ca> <17383.59233.105857.565406@eponym.sweeks.com> Message-ID: >> Of course, I don't really expect normal int*int multiplication to do >> this. >> I just heard Stephen say 'primitive' near the words 32*32->64 mul, >> and my heart jumped into my throat. ;-) >> >> There is still no way to get MLton to output the pretty 'MUL:' assembler >> that I detailed in my post. I've been hoping for some time. > > It still seems to me like it shouldn't be that hard for someone to add > (mind you, I don't have the time). Wesley, you're clearly the one to > do it since you have the need, and now you have more than a year's > experience subscribed to the list, so you know you will get help if > you need it. I can state with certainty that there is no problem > defining such a primitive, exposing it in the basis, treating it > correctly in the optimizer, and pushing it through all the ILs to the > codegen. Matthew can comment on how easy it would be to tell the x86 > codegen about it. If that's not problematic, why not spend a day a > put it in? It would be pretty trivial to tell the x86 codegen about a new primitive. From fluet@cs.cornell.edu Wed Feb 8 16:37:55 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Wed, 8 Feb 2006 11:37:55 -0500 (EST) Subject: [MLton] MLB file tree In-Reply-To: <1139187885.43e6a0ad98fe7@www2.helsinki.fi> References: <1139187885.43e6a0ad98fe7@www2.helsinki.fi> Message-ID: > Attached is a draft patch for a new option "-stop ft" to print the "MLB > file tree". That looks generally useful. I wonder, though, whether the format could be improved. Only one of the '{ }' and the indenting are necessary to capture the nesting; the '{ }' would seem easier to handle by text processing. > The file tree is useful for analyzing the (dependency) structure of a > project. Using standard text processing commands (grep, sed, ...) you can > fairly easily extract information from the file tree, such as a list of > all MLB files used by a project or the same output as produced by "-stop f". The fact that the mlb files aren't part of the output of "-stop f" is probably not the right choice. We usually use "-stop f" to extract dependencies for a Makefile; technically, you could change a mlb file in a manner that changes the meaning of a program without changing the list of source .sml files. > I implemented the option, because I wanted to know which MLB-files are > actually used when MLton is compiled, so that I can go through them to > better understand how much work it might require to get MLton to compile > under MLKit. That would be very cool. Keep us posted. I saw your comp.lang.functional posting, and it sounded like the annotations are the issue. From fluet@cs.cornell.edu Thu Feb 9 00:16:09 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Wed, 8 Feb 2006 19:16:09 -0500 (EST) Subject: [MLton] available ram Message-ID: [Moving to MLton@mlton.org, as this is a suggestion for development.] >> Which ever is used, I would expect that to be the maximum that the >> machine would ever ask for. > > ram-slop is not for specifying a maximum; it is for specifying how > much RAM is expected to be available before paging occurs. You may > want the program to run beyond that limit, but to take paging into > account (in the very limited way that MLton does). max-heap is indeed > for specifying a maximum. ram-slop and max-heap make sense each on > their own as well as together. I think a point of confusion is that s->ram = align (s->ramSlop * s->totalRam, s->pageSize); is a rather poor way of estimating the available ram. For systems where we use sysconf(_SC_PHYS_PAGES) to determine the total ram, we might well use sysconf(_SC_AVPHYS_PAGES) to determine the available ram. In fact, we ought to periodically recompute s->ram from _SC_AVPHYS_PAGES. I imagine that this would give somewhat better dynamic behavior than the current situation. We might well have an availRamSlop parameter for further customization. From henry.cejtin@sbcglobal.net Thu Feb 9 00:51:34 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Wed, 08 Feb 2006 18:51:34 -0600 Subject: [MLton] available ram In-Reply-To: Message-ID: I am pretty sure that _SC_AVPHYS_PAGES won't include memory used for buffers and disk cache (and an experiment on my machine seems to confirm that), so it is pretty worthless I would say. Sad. Besides, I think that the amount of memory available without swapping any other process would be too low a threshold. From MLton@mlton.org Thu Feb 9 06:50:13 2006 From: MLton@mlton.org (Stephen Weeks) Date: Wed, 8 Feb 2006 22:50:13 -0800 Subject: [MLton] MLB file tree In-Reply-To: References: <1139187885.43e6a0ad98fe7@www2.helsinki.fi> Message-ID: <17386.58917.995583.715795@eponym.sweeks.com> > I wonder, though, whether the format could be improved. Only one of > the '{ }' and the indenting are necessary to capture the nesting; > the '{ }' would seem easier to handle by text processing. Having both {} and nesting has the benefit for humans that the nesting is both visually apparent and the output is easily navigable by {back,for}ward-sexp. > The fact that the mlb files aren't part of the output of "-stop f" is > probably not the right choice. We usually use "-stop f" to extract > dependencies for a Makefile; technically, you could change a mlb file in a > manner that changes the meaning of a program without changing the list of > source .sml files. Good point. For example, one could reorder the files, changing the order of side effects. We did sometimes use -stop f to produce a list of SML files so that one could feed the list to SML/NJ or concatenate all the code together. But it's easy enough grep -v out the MLBs to obtain this behavior. So, if people want, it seems reasonable to me to change the meaning of -stop f to include MLB files. From MLton@mlton.org Thu Feb 9 07:01:49 2006 From: MLton@mlton.org (Stephen Weeks) Date: Wed, 8 Feb 2006 23:01:49 -0800 Subject: [MLton] available ram In-Reply-To: References: Message-ID: <17386.59613.63621.788061@eponym.sweeks.com> > I think a point of confusion is that > > s->ram = align (s->ramSlop * s->totalRam, s->pageSize); > > is a rather poor way of estimating the available ram. Agreed that it is a poor estimate. But it does have the benefit of being simple to understand and the same across all machines. > For systems where we use sysconf(_SC_PHYS_PAGES) to determine the > total ram, we might well use sysconf(_SC_AVPHYS_PAGES) to determine > the available ram. In fact, we ought to periodically recompute > s->ram from _SC_AVPHYS_PAGES. I imagine that this would give > somewhat better dynamic behavior than the current situation. There is the accuracy problem that Henry mentioned. And, I am wary that the lack of predictability of such solutions is worse than the lack of dynamic responsiveness of our simplistic approach. The truth is that making a GC play nice with paging is hard, as papers like the one Wesley mentioned show. It's better to clearly not solve the problem, as MLton does, then to make a sometimes right, sometimes wrong, attempt at solving it. > We might well have an availRamSlop parameter for further > customization. Why would one need both ramSlop and availRamSlop? From vesa.karvonen@cs.helsinki.fi Thu Feb 9 08:39:29 2006 From: vesa.karvonen@cs.helsinki.fi (Vesa Karvonen) Date: Thu, 9 Feb 2006 10:39:29 +0200 Subject: [MLton] MLB file tree Message-ID: <1139474369.43eaffc12f173@www2.helsinki.fi> Quoting Matthew Fluet : > > Attached is a draft patch for a new option "-stop ft" to print the "MLB > > file tree". > > That looks generally useful. I wonder, though, whether the format could > be improved. I'm personally not entirely happy with the format, but I'm uncertain on how to improve it. Let me elaborate on my requirements. > Only one of the '{ }' and the indenting are necessary to > capture the nesting; the '{ }' would seem easier to handle by text > processing. I want the format to be immediately useful for two purposes: - visual examination to understand the dependency structure of a project, and - processing by *simple* scripts to extract useful information, such as getting lists of files. The indentation and braces are there mainly to support visual examination. The braces, specifically, allow you to skip blocks quickly in an editor like Emacs that supports moving by sexp's. Using keywords (e.g. begin - end) would already make it more complicated to browse the output. So, I'm uncertain on whether I want the output to be more MLish. To support simple scripts, the filenames are not printed as string literals. If they were printed as string literals, then it would be much more difficult to extract useful information out of the file tree using standard text processing tools like grep and sed. (The simplest approach would probably be to implement a simple program to parse a SML string literal and print the resulting string.) Although I think that supporting "special characters" (like spaces) in filenames is a good feature to have, I also think that actually using them, for anything but legacy code, is asking for trouble. A third, but IMO less important requirement, is that the format should be suitable for more complicated automated processing, such as converting the output to be processed by Graphviz/DOT or simply computing a transitive closure of the dependencies. The braces should support that, by allowing a somewhat simpler parser to be written to extract the tree (or DAG) from the output. I think that the main problem with the current format is that it prints both relative and absolute paths. I think that it would be best to only print absolute paths. Further requirements and specific formatting proposals are welcome. ... BTW, while checking the output of the "-stop ft" option I noticed that some files were elaborated twice when compiling MLton. I recall that when I started using MLBs, I had a problem with having some files being elaborated more than once. So, IMO, by default, MLton should give a warning when a specific SML source file is elaborated more than once. I think that in most cases it is not intentional. An annotation could then be implemented to allow that warning to be disabled in specific cases. For example: ann "ignoreMultipleElaboration" in infixes.sml end > The fact that the mlb files aren't part of the output of "-stop f" is > probably not the right choice. We usually use "-stop f" to extract > dependencies for a Makefile; technically, you could change a mlb file in a > manner that changes the meaning of a program without changing the list of > source .sml files. I agree that MLB files should also be considered when computing dependencies for make. > > I implemented the option, because I wanted to know which MLB-files are > > actually used when MLton is compiled, so that I can go through them to > > better understand how much work it might require to get MLton to compile > > under MLKit. > > That would be very cool. Keep us posted. I saw your comp.lang.functional > posting, and it sounded like the annotations are the issue. Annotations are one of the issues. I already made a quick hack to MLKit to get past non-supported annotations, but then I ran into another issue. MLKit doesn't currently support export filters. Supporting them probably requires much more work, so before I try to implement export filters, I plan to workaround them and try to get MLton to compile first (to see how much work beyond supporting export filters might be required). I plan to transform (either manually or with the help of some scripts) MLB code of the form <--- foo.mlb ---> local foo-bar-and-baz-and-more.sml in signature FOO structure Bar = Baz functor FooBar end <--- foo.mlb ---> to <--- foo.mlb ---> local foo-bar-and-baz-and-more.sml in foo-filter.sml end <--- foo.mlb ---> <--- foo-filter.sml ---> signature FOO = FOO structure Bar = Baz functor FooBar (S: FOO) = FooBar (S) <--- foo-filter.sml ---> Which, AFAIU, should give the same meaning (or maybe there is some complication that I can't see?). This makes me wonder about the importance of the export filter feature. -Vesa Karvonen From vesa.karvonen@cs.helsinki.fi Thu Feb 9 09:35:29 2006 From: vesa.karvonen@cs.helsinki.fi (Vesa Karvonen) Date: Thu, 9 Feb 2006 11:35:29 +0200 Subject: [MLton] MLB file tree Message-ID: <1139477729.43eb0ce1125f9@www1.helsinki.fi> Quoting Vesa Karvonen : > An annotation could then be implemented to allow that > warning to be disabled in specific cases. For example: > > ann > "ignoreMultipleElaboration" > in > infixes.sml > end [I was in a hurry to get to work when I wrote that.] A better annotation would be something like multipleElaboration {warn|error|ignore} and it would be used like: ann "multipleElaboration ignore" in infixes.sml end If this sounds like a useful feature (diagnostic on multiple elaboration) to have, I could look into implementing it during the weekend. (I also have another draft patch (the printing of types with fewer parentheses) waiting, that I haven't had time to complete in the past few months.) -Vesa Karvonen From fluet@cs.cornell.edu Thu Feb 9 14:14:07 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Thu, 9 Feb 2006 09:14:07 -0500 (EST) Subject: [MLton] MLB file tree In-Reply-To: <1139477729.43eb0ce1125f9@www1.helsinki.fi> References: <1139477729.43eb0ce1125f9@www1.helsinki.fi> Message-ID: > A better annotation would be something like > > multipleElaboration {warn|error|ignore} > > and it would be used like: > > ann > "multipleElaboration ignore" > in > infixes.sml > end Interestingly, I am aggressively using elaboration of the same source file multiple times to refactor the Basis Library implementation to be agnostic to the sizes of C types. Essentially, I have <--- config/c/x86-linux/c-types.sml ---> structure C_Int = Int32 structure C_Long = Int32 structure C_LongLong = Int64 ... <--- config/c/x86-linux/c-types.sml ---> <--- config/c/amd64-linux/c-types.sml ---> structure C_Int = Int32 structure C_Long = Int64 structure C_LongLong = Int64 ... <--- config/c/x86-linux/c-types.sml ---> And I reference them via config/c/$(TARGET_ARCH)-$(TARGET_OS)/c-types.sml. I elaborate them multiple times, once with little more than the primitive integer types and primops in Int{32,64} and then once again when Int{32,64} have been redefined with more operations. The first binding gives me the types C_Long.int for use in the definitions of primitives and _import-ed functions. In any case, this isn't an argument against the annotation. > If this sounds like a useful feature (diagnostic on multiple > elaboration) to have, I could look into implementing it during the > weekend. (I also have another draft patch (the printing of types with > fewer parentheses) waiting, that I haven't had time to complete in the > past few months.) Feel free. As you've pointed out elsewhere, most annotations do not change the meaning of the program, but simply what warnings/errors are reported. So, I think it is alright to experiment a bit with different annotation choices. From fluet@cs.cornell.edu Thu Feb 9 14:36:14 2006 From: fluet@cs.cornell.edu (Matthew Fluet) Date: Thu, 9 Feb 2006 09:36:14 -0500 (EST) Subject: [MLton] MLB file tree In-Reply-To: <1139474369.43eaffc12f173@www2.helsinki.fi> References: <1139474369.43eaffc12f173@www2.helsinki.fi> Message-ID: On Thu, 9 Feb 2006, Vesa Karvonen wrote: > Quoting Matthew Fluet : >>> Attached is a draft patch for a new option "-stop ft" to print the "MLB >>> file tree". >> >> That looks generally useful. I wonder, though, whether the format could >> be improved. > > I'm personally not entirely happy with the format, but I'm uncertain on > how to improve it. Let me elaborate on my requirements. You and Stephen have made decent arguments for including both '{ }' and indenting. > I think that the main problem with the current format is that it prints > both relative and absolute paths. I think that it would be best to only > print absolute paths. That ought to be quite easy to achieve. Although, I didn't see any relative paths in the sample output. >>> I implemented the option, because I wanted to know which MLB-files are >>> actually used when MLton is compiled, so that I can go through them to >>> better understand how much work it might require to get MLton to compile >>> under MLKit. >> >> That would be very cool. Keep us posted. I saw your comp.lang.functional >> posting, and it sounded like the annotations are the issue. > > Annotations are one of the issues. I already made a quick hack to MLKit > to get past non-supported annotations, but then I ran into another issue. > MLKit doesn't currently support export filters. Supporting them probably > requires much more work, so before I try to implement export filters, I > plan to workaround them and try to get MLton to compile first (to see how > much work beyond supporting export filters might be required). I haven't looked at the MLKit's implementation of MLBs in any depth, but export filters are pretty trivial to support in MLton's implementation. > I plan to transform (either manually or with the help of some scripts) MLB > code of the form > > <--- foo.mlb ---> > local > foo-bar-and-baz-and-more.sml > in > signature FOO > structure Bar = Baz > functor FooBar > end > <--- foo.mlb ---> > > to > > <--- foo.mlb ---> > local > foo-bar-and-baz-and-more.sml > in > foo-filter.sml > end > <--- foo.mlb ---> > > <--- foo-filter.sml ---> > signature FOO = FOO > structure Bar = Baz > functor FooBar (S: FOO) = FooBar (S) > <--- foo-filter.sml ---> > > Which, AFAIU, should give the same meaning (or maybe there is some > complication that I can't see?). This makes me wonder about the > importance of the export filter feature. It should have the same meaning in most cases. Functors are really the complication, as the argument signature need not be bound to a signature identifier and it is not necessarily true that the signature argument can be expressed with the basis in scope. For example: <--- a.sml ---> structure A = struct type t = A end <--- a.sml ---> <--- f.sml ---> functor F(val x: A.t) = struct ... end <--- f.sml ---> <--- foo.mlb ---> local local a.sml in f.sml end in functor F end <--- foo.mlb ---> You can't transform this in the manner described above, since the functor argument includes the type A.t, which isn't in scope at the point of the export filter. On the other hand, it would be a stylistic error if any functors in the mlton source tree did not have their argument signature bound to a signature identifier, and hiding the types of functor argument components would generally make the functor unusable, so I doubt that this will be an issue. As to the utility of export filters (and, more generally, module identifier binding), they are there for convenience, not expressiveness. But, if you look at the MLB system as namespace management, then it makes sense to not have to drop down to a .sml file to do such renamings. Essentially, if with nearly every z.mlb file you have a z-filter.sml file, then there is a redundancy. From fluet@mlton.org Fri Feb 10 00:38:31 2006 From: fluet@mlton.org (Matthew Fluet) Date: Thu, 9 Feb 2006 16:38:31 -0800 Subject: [MLton] commit r4349: preliminary support for compiler specific annotations Message-ID: <200602100038.k1A0cVi15008@mlton.org> Added very simple support for compiler specific annotations. If an annotation contains ":", then the text preceding the ":" is meant to denote a compiler. For MLton, if the text preceding the ":" is equal to "mlton", then the remaining annotation is scanned as a normal annotation. If the text preceding the ":" is not-equal to "mlton", then the annotation is ignored, and no warning is issued. ---------------------------------------------------------------------- U mlton/trunk/mlton/control/control-flags.sig U mlton/trunk/mlton/control/control-flags.sml U mlton/trunk/mlton/elaborate/elaborate-mlbs.fun U mlton/trunk/mlton/main/main.fun From MLton@mlton.org Fri Feb 10 02:26:14 2006 From: MLton@mlton.org (Stephen Weeks) Date: Thu, 9 Feb 2006 18:26:14 -0800 Subject: [MLton] Paging friendly GC? In-Reply-To: <50258B57-DDD8-4784-9FB7-370DAD5F24C8@terpstra.ca> References: <50258B57-DDD8-4784-9FB7-370DAD5F24C8@terpstra.ca> Message-ID: <17387.63942.291617.117084@eponym.sweeks.com> > However, I seem to recall that MLton uses a 'generational mark-sweep' > algorithm...? Yes, that is what MLton uses when memory gets tight. > I know that MLton performs very poorly once the heap size exceeds > physical memory. The system thrashes to death. So, when I saw this, > I thought maybe those of you with a clue might care: > > http://www.cs.umass.edu/~emery/pubs/f034-hertz.pdf > > Is this relevant / useful for MLton? Yes. It is a nice idea that could be applied to MLton's collector. My guess is that it would be a one to two month project. For those who haven't read the paper, the idea is to add to the collector an additional (oldest) generation consisting of all the pages that are not resident in memory. The garbage collector doesn't visit this oldest generation, and hence doesn't cause page faults. A single bit in the header of each object (a "bookmark") is used to keep track of the existence of an intergenerational pointer from the oldest generation to the object. As pages are moved between memory and disk, the runtime maintains the bookmarks (this requires OS cooperation to inform of the movement). Applying the technique to MLton would require a substantial rewrite because of MLton's use of a monolithic heap. There are also changes due to the fact that the runtime can't move objects pointed to by objects in the oldest generation, since you don't want to visit the out-of-RAM page to update the pointer. There's also the problem of avoiding space leaks from keeping dead off-disk objects alive too long. None of those problems is insurmountable; they just take work. The main problem in practice is that the technique requires cooperation from the OS that doesn't seem to be available in stock kernels. They have a 600 line kernel mod for Linux. I don't know how much, if any, of the benefit can be achieved on a stock kernel. > Could something like this make a self-compile feasible with < 512MB RAM? I doubt it would help much. In self compiles, there really is that much live data, and it's all touched by the mutator frequently. From MLton@mlton.org Fri Feb 10 15:34:58 2006 From: MLton@mlton.org (Stephen Weeks) Date: Fri, 10 Feb 2006 07:34:58 -0800 Subject: [MLton] using fold to write numeric constants Message-ID: <17388.45730.227626.857357@eponym.sweeks.com> The following code shows how to use fold to conveniently write numeric constants in any base of various types. For example, N i 10 `1`2`3 $ denotes 123:int in base 10, while N ii 8 `2`3 $ denotes 19:IntInf.int in base 8. Digits are checked dynamically to ensure they are valid for the base, but of course MLton will simplify everything away at compile time. I can imagine using phantom types to statically ensure validity, at the expense of (perhaps too much) extra verbiage. -------------------------------------------------------------------------------- fun $ (a, f) = f a fun curry f x y = f (x, y) fun id x = x fun pass x f = f x structure Fold = struct val fold = pass fun step0 h (a1, f) = fold (h a1, f) fun step1 h $ x = step0 (curry h x) $ end structure Num = struct fun N ty base = Fold.fold (ty base, fn (n, _) => n) local fun make (zero, op *, op +, op <, op <=, i2x, x2s) base = let val base = i2x base in (zero, fn (i, n) => let val i = i2x i in if zero <= i andalso i < base then n * base + i else raise Fail (concat ["Num: ", x2s i, " is not a valid digit in base ", x2s base]) end) end in val i = make (0, op *, op +, op <, op <=, id, Int.toString) val ii = make (0, op *, op +, op <, op <=, IntInf.fromInt, IntInf.toString) val w = make (0w0, op *, op +, op <, op <=, Word.fromInt, Word.toString) end fun ` z = Fold.step1 (fn (i, (ac, step)) => (step (i, ac), step)) z val a = 10 val b = 11 val c = 12 val d = 13 val e = 14 val f = 15 end local fun make x2s x = print (concat [x2s x, "\n"]) in val pi = make Int.toString val pii = make IntInf.toString val pw = make Word.toString end local open Num in val () = pi (N i 10 `1`2`3 $) val () = pii (N ii 10 `1`2`3`4`5`6`7`8`9`0`1`2 $) val () = pw (N w 16 `1`b $) val () = pi (N i 12 `1`a $) val () = pii (N ii 8 `2`3 $) val () = pw (N w 2 `1`1`0 $) end From vesa.karvonen@cs.helsinki.fi Fri Feb 10 16:24:09 2006 From: vesa.karvonen@cs.helsinki.fi (Vesa Karvonen) Date: Fri, 10 Feb 2006 18:24:09 +0200 Subject: [MLton] using fold to write numeric constants Message-ID: <1139588649.43ecbe297be32@www1.helsinki.fi> Quoting Stephen Weeks : > The following code shows how to use fold to conveniently write numeric > constants in any base of various types. For example, > > N i 10 `1`2`3 $ > > denotes 123:int in base 10, while > > N ii 8 `2`3 $ > > denotes 19:IntInf.int in base 8. Neat! (((Here is how one can do similar things with the C99 preprocessor: http://cvs.sourceforge.net/viewcvs.py/chaos-pp/order-pp/example/binary.h?view=markup Warning: Not to be taken too seriously!))) Looking briefly at the code, I noticed a minor simplification: > fun make (zero, op *, op +, op <, op <=, i2x, x2s) base = ^^^^ ^^^^^ Only one of those is needed. For example, using only `op <' you could write if not (i < zero) andalso i < base then instead of > if zero <= i andalso i < base then This would be a useful simplification (from the user's point-of-view) if the `make' function would not be local. The `zero' could also be eliminated easily. Instead of passing 0 to `make', you can compute a zero using the expression `i2x 0'. Of course, you could also implement `op *' in terms of `op +' and `op <', but that is likely to be inefficient (or maybe I'm underestimating MLton ;-)). (These issues are fresh on my mind, because I've been thinking about using higher-order functions, like `make', to implement a benchmark http://shootout.alioth.debian.org/gp4/benchmark.php?test=recursive&lang=all for MLton.) -Vesa Karvonen From MLton@mlton.org Fri Feb 10 18:08:18 2006 From: MLton@mlton.org (Stephen Weeks) Date: Fri, 10 Feb 2006 10:08:18 -0800 Subject: [MLton] using fold to write numeric constants In-Reply-To: <1139588649.43ecbe297be32@www1.helsinki.fi> References: <1139588649.43ecbe297be32@www1.helsinki.fi> Message-ID: <17388.54930.735083.688570@eponym.sweeks.com> > Looking briefly at the code, I noticed a minor simplification: > > > fun make (zero, op *, op +, op <, op <=, i2x, x2s) base = > ^^^^ ^^^^^ > > Only one of those is needed. ... > The `zero' could also be eliminated easily. ... > This would be a useful simplification (from the user's point-of-view) if the > `make' function would not be local. Good catches. It does make sense for "make" to be exported, so that the code can be used for user-specified types. -------------------------------------------------------------------------------- fun $ (a, f) = f a fun curry f x y = f (x, y) fun id x = x fun pass x f = f x structure Fold = struct val fold = pass fun step0 h (a1, f) = fold (h a1, f) fun step1 h $ x = step0 (curry h x) $ end structure Num = struct fun N ty base = Fold.fold (ty base, fn (n, _) => n) fun make (op *, op +, op <, i2x, x2s) base = let val zero = i2x 0 val base = i2x base in (zero, fn (i, n) => let val i = i2x i in if not (i < zero) andalso i < base then n * base + i else raise Fail (concat ["Num: ", x2s i, " is not a valid digit in base ", x2s base]) end) end val i = make (op *, op +, op <, id, Int.toString) val ii = make (op *, op +, op <, IntInf.fromInt, IntInf.toString) val w = make (op *, op +, op <, Word.fromInt, Word.toString) fun ` z = Fold.step1 (fn (i, (ac, step)) => (step (i, ac), step)) z val a = 10 val b = 11 val c = 12 val d = 13 val e = 14 val f = 15 end local fun make x2s x = print (concat [x2s x, "\n"]) in val pi = make Int.toString val pii = make IntInf.toString val pw = make Word.toString end local open Num in val () = pi (N i 10 `1`2`3 $) val () = pii (N ii 10 `1`2`3`4`5`6`7`8`9`0`1`2 $) val () = pw (N w 16 `1`b $) val () = pi (N i 12 `1`a $) val () = pii (N ii 8 `2`3 $) val () = pw (N w 2 `1`1`0 $) end From twm@andrew.cmu.edu Mon Feb 13 21:14:30 2006 From: twm@andrew.cmu.edu (Tom 7) Date: Mon, 13 Feb 2006 16:14:30 -0500 (EST) Subject: [MLton] patch for CM cc variable support? Message-ID: May I request this small change to the way that CM works in mlton? Right now, there are no defined symbols whatsoever, which (as far as I can tell) makes it impossible to use the conditional compilation system to make a CM file that works with both mlton and the newest sml/nj. file mlton/cm/parse.sml line 37: -- old -- val lex = Lexer.lexer {strdef = no, sigdef = no, fctdef = no, fsigdef = no, symval = fn _ => NONE} (cmfile, ins) -- new -- fun symval "MLTON" = SOME 1 | symval _ = NONE val lex = Lexer.lexer {strdef = no, sigdef = no, fctdef = no, fsigdef = no, symval = symval} (cmfile, ins) With this, I can write CM files like group is #if MLTON < 1 $/basis.cm #endif file.sml etc.sml that compile with both compilers. (Also, if anyone can think of a way to achieve this without any change to mlton, I'm all ears!) It might also make sense to modify line 408 of lexer.sml to return SOME 0 for undefined symbols, as SML/NJ apparently does. I do understand the desire to avoid the slippery and infinite slope of CM compatibility hacks, however! Thanks as always, Tom [ NEW! : http://tom7.org/ ] [ OLD! : http://fonts.tom7.com/ ] From MLton@mlton.org Mon Feb 13 22:38:08 2006 From: MLton@mlton.org (Stephen Weeks) Date: Mon, 13 Feb 2006 14:38:08 -0800 Subject: [MLton] patch for CM cc variable support? In-Reply-To: References: Message-ID: <17393.2640.587176.365960@eponym.sweeks.com> > May I request this small change to the way that CM works in mlton? > Right now, there are no defined symbols whatsoever, . which (as far > as I can tell) makes it impossible to use the conditional > compilation system to make a CM file that works with both mlton and > the newest sml/nj. According to http://mlton.org/CompilationManager, the following should work. I just checked, and indeed it does. In SML/NJ, the preprocessor defines the symbol SMLNJ_VERSION. In MLton, no symbols are defined. So, to conditionally include foo.sml when compiling under SML/NJ, one can use the following pattern. # if (defined(SMLNJ_VERSION)) foo.sml # endif To conditionally include foo.sml when compiling under MLton, one can negate the test. # if (! defined(SMLNJ_VERSION)) foo.sml # endif > It might also make sense to modify line 408 of lexer.sml to return > SOME 0 for undefined symbols, as SML/NJ apparently does. I guess you mean line 404? I have no strong objection to such a change, if that's what people in the CM world would expect. But I worry that such a change would cause more confusion than reporting an error, as conditionals would be silently taken (or not). Since MLton doesn't define any variables, I don't really see the use for such a thing, or any useful overlap with SML/NJ. Also, with the above idiom, it should be possible to wrap stuff that uses SML/NJ CM variables so that it only runs under SML/NJ, right? Anyone else have any thoughts? From twm@andrew.cmu.edu Mon Feb 13 22:47:01 2006 From: twm@andrew.cmu.edu (Tom 7) Date: Mon, 13 Feb 2006 17:47:01 -0500 (EST) Subject: [MLton] patch for CM cc variable support? In-Reply-To: <17393.2640.587176.365960@eponym.sweeks.com> References: <17393.2640.587176.365960@eponym.sweeks.com> Message-ID: This works fine, thanks! Somehow I led myself to believe that the defined() mechanism was only for SML identifiers, and missed the use for CM variables (and the mlton page describing this). Oops.. I don't care about CM compatibility, I just wanted some way to maintain fewer files for small projects. Since that already exists, I withdraw my requests! =) Tom > >> May I request this small change to the way that CM works in mlton? >> Right now, there are no defined symbols whatsoever, . which (as far >> as I can tell) makes it impossible to use the conditional >> compilation system to make a CM file that works with both mlton and >> the newest sml/nj. > > According to http://mlton.org/CompilationManager, the following should > work. I just checked, and indeed it does. > > In SML/NJ, the preprocessor defines the symbol SMLNJ_VERSION. In > MLton, no symbols are defined. So, to conditionally include foo.sml > when compiling under SML/NJ, one can use the following pattern. > > # if (defined(SMLNJ_VERSION)) > foo.sml > # endif > > To conditionally include foo.sml when compiling under MLton, one can > negate the test. > > # if (! defined(SMLNJ_VERSION)) > foo.sml > # endif > >> It might also make sense to modify line 408 of lexer.sml to return >> SOME 0 for undefined symbols, as SML/NJ apparently does. > > I guess you mean line 404? I have no strong objection to such a > change, if that's what people in the CM world would expect. But I > worry that such a change would cause more confusion than reporting an > error, as conditionals would be silently taken (or not). Since MLton > doesn't define any variables, I don't really see the use for such a > thing, or any useful overlap with SML/NJ. Also, with the above idiom, > it should be possible to wrap stuff that uses SML/NJ CM variables so > that it only runs under SML/NJ, right? Anyone else have any thoughts? > > [ NEW! : http://tom7.org/ ] [ OLD! : http://fonts.tom7.com/ ] From henry.cejtin@sbcglobal.net Tue Feb 14 15:47:48 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Tue, 14 Feb 2006 09:47:48 -0600 Subject: [MLton] patch for CM cc variable support? In-Reply-To: <17393.2640.587176.365960@eponym.sweeks.com> Message-ID: I agree with Stephen that it is better to report the error about symbols not being defined than it is to try to be compatible and have such symbols have an assumed value of 0. From MLton@mlton.org Tue Feb 21 16:44:13 2006 From: MLton@mlton.org (Stephen Weeks) Date: Tue, 21 Feb 2006 08:44:13 -0800 Subject: [MLton] Welcome to Immanuel Litzroth Message-ID: <17403.17245.580381.986103@eponym.sweeks.com> Welcome to Immanuel Litzroth, who has joined the MLton mailing list. Immanuel is a professional C++ programmer with an interest in functional languages, and is new to MLton/SML. He is interested in reading the SML Definition and Commentary and learning about MLton's compilation model and MLB files. He is currently developing a PDF parser in SML. Immanuel, there are a number of readers of this list who are intimately familiar with the Definition, and so if you have a question about it you can almost certainly find an answer. Also, I am not aware of any existing PDF parsing library in SML, so if you are able to contribute your code to the community, it would be much appreciated. Welcome! From geoffw@cis.upenn.edu Wed Feb 22 05:30:37 2006 From: geoffw@cis.upenn.edu (Geoffrey Alan Washburn) Date: Wed, 22 Feb 2006 00:30:37 -0500 Subject: [MLton] Re: Welcome to Immanuel Litzroth In-Reply-To: <17403.17245.580381.986103@eponym.sweeks.com> References: <17403.17245.580381.986103@eponym.sweeks.com> Message-ID: <43FBF6FD.8050501@cis.upenn.edu> Stephen Weeks wrote: > Welcome to Immanuel Litzroth, who has joined the MLton mailing list. > Immanuel is a professional C++ programmer with an interest in > functional languages, and is new to MLton/SML. He is interested in > reading the SML Definition and Commentary and learning about MLton's > compilation model and MLB files. He is currently developing a PDF > parser in SML. > > Immanuel, there are a number of readers of this list who are > intimately familiar with the Definition, and so if you have a question > about it you can almost certainly find an answer. Also, I am not > aware of any existing PDF parsing library in SML, so if you are able > to contribute your code to the community, it would be much > appreciated. If I remember correctly, Jason Reed has written some of a library for writing PDFs via SML, I don't know whether it has any parsing capabilities. From geoffw@cis.upenn.edu Wed Feb 22 05:30:37 2006 From: geoffw@cis.upenn.edu (Geoffrey Alan Washburn) Date: Wed, 22 Feb 2006 00:30:37 -0500 Subject: [MLton] Re: Welcome to Immanuel Litzroth In-Reply-To: <17403.17245.580381.986103@eponym.sweeks.com> References: <17403.17245.580381.986103@eponym.sweeks.com> Message-ID: <43FBF6FD.8050501@cis.upenn.edu> Stephen Weeks wrote: > Welcome to Immanuel Litzroth, who has joined the MLton mailing list. > Immanuel is a professional C++ programmer with an interest in > functional languages, and is new to MLton/SML. He is interested in > reading the SML Definition and Commentary and learning about MLton's > compilation model and MLB files. He is currently developing a PDF > parser in SML. > > Immanuel, there are a number of readers of this list who are > intimately familiar with the Definition, and so if you have a question > about it you can almost certainly find an answer. Also, I am not > aware of any existing PDF parsing library in SML, so if you are able > to contribute your code to the community, it would be much > appreciated. If I remember correctly, Jason Reed has written some of a library for writing PDFs via SML, I don't know whether it has any parsing capabilities. From wesley@terpstra.ca Sun Feb 26 18:26:00 2006 From: wesley@terpstra.ca (Wesley W. Terpstra) Date: Sun, 26 Feb 2006 19:26:00 +0100 Subject: [MLton] GUI toolkits (was: mingwows) Message-ID: On 2005-11-15 03:17, Henry Cejtin wrote: > [...] working on a GTK binding [...] > > Sorry, no CVS although I talked to Stephen about it and it will go into the > MLton one when it is at least vaguely presentable. My estimate (notoriously > inaccurate) is 1 month or so. Just curious if the status has changed...? I'm still very interested in a nice MLton binding of GTK. From henry.cejtin@sbcglobal.net Sun Feb 26 18:41:39 2006 From: henry.cejtin@sbcglobal.net (Henry Cejtin) Date: Sun, 26 Feb 2006 12:41:39 -0600 Subject: [MLton] GUI toolkits (was: mingwows) In-Reply-To: Message-ID: Sadly, my usual inaccuracy on estimating how long things take is still holding up, but it will go in, hopefully shortly.